本文解决ViewPager嵌套时内部的ViewPager不能滑动的问题
如果你的界面是由ViewPager和Fragment写的
在子页面中仍然需要ViewPager的情况,子ViewPager是不能滑动的,滑动的时候默认滑动的是父VIewPager
这时候我们只需要在重写子ViewPager和在子ViewPager的touch事件中调用getParent().requestDisallowInterceptTouchEvent(true);通知父控件不进行touch拦截就可以了
如下:
public class ChildViewPager extends ViewPager { public ChildViewPager(Context context) { super(context); // TODO Auto-generated constructor stub } public ChildViewPager(Context context, AttributeSet attrs) { super(context, attrs); } PointF downPoint = new PointF(); OnSingleTouchListener onSingleTouchListener; @Override public boolean onTouchEvent(MotionEvent evt) { switch (evt.getAction()) { case MotionEvent.ACTION_DOWN: // 记录按下时候的坐标 downPoint.x = evt.getX(); downPoint.y = evt.getY(); if (this.getChildCount() > 1) { // 有内容,多于1个时 // 通知其父控件,现在进行的是本控件的操作,不允许拦截 getParent().requestDisallowInterceptTouchEvent(true); } break; case MotionEvent.ACTION_MOVE: if (this.getChildCount() > 1) { // 有内容,多于1个时 // 通知其父控件,现在进行的是本控件的操作,不允许拦截 getParent().requestDisallowInterceptTouchEvent(true); } break; case MotionEvent.ACTION_UP: // 在up时判断是否按下和松手的坐标为一个点 if (PointF.length(evt.getX() - downPoint.x, evt.getY() - downPoint.y) < (float) 5.0) { onSingleTouch(this); return true; } break; } return super.onTouchEvent(evt); } public void onSingleTouch(View v) { if (onSingleTouchListener != null) { onSingleTouchListener.onSingleTouch(v); } } public interface OnSingleTouchListener { public void onSingleTouch(View v); } public void setOnSingleTouchListener( OnSingleTouchListener onSingleTouchListener) { this.onSingleTouchListener = onSingleTouchListener; } }