2015-04-11 4 views
6

Я пытаюсь получить Проведите вверх и проведите вниз жесты, работающие над Фрагментом. То же самое отлично работает. На фрагменте у меня проблема с dispatchTouchEvent. Как вы отправилиTouchEvent во Фрагмент? Существует ли эквивалентный способ достижения этого?dispatchTouchEvent in Fragment в Android

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

ответ

3

Если ваша цель - обнаружить/обработать салфетки, добавьте прослушиватель событий события на вид фрагмента после создания представления.

+0

Я сделал то же самое, что и ваше предложение. Благодаря! – TheDevMan

+0

Я попытался добавить onTouchListener в свою главную группу представлений в OnCreateView(), onAttach() и onResume(), но я получаю NullPointerException ... Где я должен добавить слушателя? –

2

Фрагменты прилагаются к деятельности, не заменяя деятельность. Таким образом, вы по-прежнему можете переопределить dispatchTouchEvent в родительской активности фрагмента и передать любые действия оттуда.

Например:

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

вы должны dispatchTouchEvent в вашей родительской деятельности, как этот

добавить этот код на родительскую активность:

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

и добавить этот код фрагмент вы хотели Dispach контакта в нем:

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

я использовать этот метод, чтобы получить все проведите вправо или влево в случае фрагмента, не конфликтуя с другим элем в странице .unlike RAX ответа

+0

это вызвало выполнение салфетки прослушивания со всеми элементами управления –