ViewPager和Fragment中的View的点击事件冲突

ViewPager属于父布局,View属于子布局;

触摸事件是先到父View,再到子View,所以可以让ViewPager取消拦截事件;

public class ComposeViewPager extends ViewPager {
    private String TAG = "ComposeViewPager";
    public ComposeViewPager(Context context) {
        this(context, null);
    }

    public ComposeViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        if(action == MotionEvent.ACTION_MOVE){
            return false;  //false表示不拦截
        }
        return super.onInterceptTouchEvent(ev);
    }
}

 或者在子View中重写函数,告诉父View不要拦截,让自己处理:

@Override
  public boolean dispatchTouchEvent(MotionEvent ev) { //处理与Viewpager的事件冲突
    getParent().requestDisallowInterceptTouchEvent(true);   //true表示让自己处理,不要拦截
    return super.dispatchTouchEvent(ev);
  }
原文地址:https://www.cnblogs.com/zhaozilongcjiajia/p/10762412.html