Android中的Fragment中的dispatchTouchEvent

时间:2015-04-11 01:31:01

标签: android android-fragments

我正试图向上滑动并向下滑动处理Fragment的手势。 这同样适用于活动。在Fragment上我遇到了dispatchTouchEvent的问题。我如何在Fragment中调度触发事件?是否有相同的方法实现这一目标?

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

3 个答案:

答案 0 :(得分:4)

如果您的目标是检测/处理滑动,请在创建视图后在片段的视图中添加触摸事件侦听器。

答案 1 :(得分:4)

碎片附加到活动,而不是替换活动。因此,您仍然可以在片段父活动中覆盖dispatchTouchEvent,并从那里传递任何操作。

例如:

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

答案 2 :(得分:4)

您必须在父活动中发送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);
}

并将此代码添加到片段中,您希望在其中发送触摸:

//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 answer