Search code examples
androidandroid-viewpagertouch-event

Disable child viewPager swipe inside parent viewPager


I want to disable swipe of child viewpager which is in a parent viewpager.

I currently use this custom child viewpager

public class CustomViewPager extends ViewPager {

public CustomViewPager(Context context) {
    super(context);
}

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

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages
    return true;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    // Never allow swiping to switch between pages
    return true;
}

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {

    return true;
}
}

This disable swipe of child viewpager,but the parent viewpager swiping get disabled at that portion.


Solution

  • You should return false from both onInterceptTouchEvent and onTouchEvent in the child ViewPager. Returning True from onTouchEvent will tell the parent that the view has handled the event successfully, which is not what you want.

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        // Never allow swiping to switch between pages
        return false;
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Never allow swiping to switch between pages
        return false;
    }