Android中片段中的dispatchTouchEvent

Android中片段中的dispatchTouchEvent,android,android-fragments,Android,Android Fragments,我试着让上下滑动手势在片段中工作。 这同样适用于活动。在Fragment中,我对dispatchTouchEvent有一个问题。如何在片段中使用dispatchTouchEvent?有没有同等的方法来实现这一点 @Override public boolean dispatchTouchEvent(MotionEvent me) { this.detector.onTouchEvent(me); return super.dispatchTouch

我试着让上下滑动手势在片段中工作。 这同样适用于活动。在Fragment中,我对dispatchTouchEvent有一个问题。如何在片段中使用dispatchTouchEvent?有没有同等的方法来实现这一点

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

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

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

例如:

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

您必须像这样在父活动中调度TouchEvent 将此代码添加到父活动:

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);
}
并将此代码添加到要在其中显示触摸的片段:

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

我使用此方法在片段中获取所有向右或向左滑动事件,而不会与页面中的其他元素冲突。与rax答案不同,我按照您的建议执行了相同的操作。谢谢我尝试将onTouchListener添加到OnCreateView()、onAttach()和onResume()中的主视图组中,但我得到了NullPointerException。。。我应该在哪里添加侦听器?这导致使用所有控件执行滑动侦听
//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);
        }
    });
}