2015-04-11 8 views
6

Próbuję przesuwać palcem w górę i przesuwać palcem gesty pracujące nad fragmentem. To samo działa dobrze na działalności. W Fragment mam problem z dispatchTouchEvent. Jak mogę wysłaćTouchEvent w Fragment? Czy istnieje równoważny sposób osiągnięcia tego?dispatchTouchEvent w Fragment w systemie Android

Odpowiedz

3

Jeśli Twoim celem jest wykrywanie/obsługiwanie przeciągania, dodaj detektor zdarzeń dotykowych w widoku fragmentu po utworzeniu widoku.

+0

Zrobiłem to samo, co twoja sugestia. Dzięki! – TheDevMan

+0

Próbowałem dodać onTouchListener do mojej głównej grupy view w OnCreateView(), onAttach() i onResume(), ale dostaję NullPointerException ... Gdzie powinienem dodać detektor? –

2

Fragmenty są dołączane do działania, nie zastępując działania. Nadal możesz przesłonić dispatchTouchEvent w swojej macierzystej aktywności fragmentu i przekazać wszelkie działania z tego miejsca.

Na przykład:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    MyFragment myFragment = (MyFragment) getFragmentManager().findFragmentByTag("MY_FRAGMENT_TAG"); 
    myFragment.doSomething(); 
    return super.dispatchTouchEvent(ev); 
} 
3

trzeba dispatchTouchEvent w swojej działalności macierzystej jak tego

dodać ten kod do działalności jednostki dominującej:

private List<MyOnTouchListener> onTouchListeners; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    if(onTouchListeners==null) 
    { 
     onTouchListeners=new ArrayList<>(); 
    } 
} 
public void registerMyOnTouchListener(MyOnTouchListener listener){ 
    onTouchListeners.add(listener); 
} 
@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    for(MyOnTouchListener listener:onTouchListeners) 
     listener.onTouch(ev); 
    return super.dispatchTouchEvent(ev); 
} 
public interface MyOnTouchListener { 
    public void onTouch(MotionEvent ev); 
} 

OnSwipeTouchListener:

public class OnSwipeTouchListener{ 

private final GestureDetector gestureDetector; 

public OnSwipeTouchListener (Context ctx){ 
    gestureDetector = new GestureDetector(ctx, new GestureListener()); 
} 

private final class GestureListener extends SimpleOnGestureListener { 
    //override touch methode like ondown ... 
    //and call the impelinfragment() 
} 
public void impelinfragment(){ 
//this method impelment in fragment 
} 
//by calling this mehod pass touch to detector 
public void onTouch(MotionEvent event) { 
    gestureDetector.onTouchEvent(event); 
} 

i dodać ten kod do fragmentacji chcesz Dispach dotyk w nim:

//ontouch listenr 
MainActivity.MyOnTouchListener onTouchListener; 
private OnSwipeTouchListener touchListener=new OnSwipeTouchListener(getActivity()) { 
    public void impelinfragment(){ 
//do what you want:D 
} 

}; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    //setting for on touch listener 
    ((MainActivity)getActivity()).registerMyOnTouchListener(new MainActivity.MyOnTouchListener() { 
     @Override 
     public void onTouch(MotionEvent ev) { 
      LocalUtil.showToast("i got it "); 
      touchListener.onTouch(ev); 
     } 
    }); 
} 

użyć tej metody, aby uzyskać wszystkie bezstykowa w prawo lub lewo, w przypadku fragmentu bez sprzeczne z innymi ELEM na stronie .unlike RAX odpowiedź

+0

spowodowało to wykonanie przesłuchania dotykowego przy użyciu wszystkich elementów sterujących –

Powiązane problemy