2015-04-11 18 views
6

Sto cercando di far scorrere il dito verso l'alto per scorrere i gesti su Fragment. Lo stesso sta funzionando bene sull'attività. Su Framment ho un problema con dispatchTouchEvent. Come faccio a spedireTouchEvent in Fragment? C'è un modo equivalente per raggiungere questo?dispatchTouchEvent in Fragment in Android

@Override 
    public boolean dispatchTouchEvent(MotionEvent me) 
    { 
     this.detector.onTouchEvent(me); 
     return super.dispatchTouchEvent(me); 
    } 

risposta

3

Se il vostro obiettivo è quello di rilevare/maniglia magnetica, aggiungere un tocco listener di eventi sul punto di vista della frammento dopo aver creato la vista.

+0

Ho fatto lo stesso come il tuo suggerimento. Grazie! – TheDevMan

+0

Ho provato ad aggiungere onTouchListener al mio viewgroup principale in OnCreateView(), onAttach() e onResume(), ma sto ricevendo NullPointerException ... Dove dovrei aggiungere il listener? –

2

I frammenti sono associati all'attività e non sostituiscono l'attività. In questo modo puoi comunque eseguire l'override di dispatchTouchEvent nell'attività principale del frammento e passare qualsiasi azione da lì.

Ad esempio:

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

è necessario dispatchTouchEvent nella vostra attività genitore come quello

aggiungere questo codice per l'attività genitore:

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); 
} 

e aggiungere questo codice a frammentarsi vi piace Dispach tocco in esso:

//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); 
     } 
    }); 
} 

io uso questo metodo per ottenere tutto strisciare per evento destra o sinistra nel frammento senza entrare in conflitto con altri elem nella pagina .unlike risposta rax

+0

questo ha causato l'esecuzione di scorrimento in ascolto con tutti i controlli –