如何在某些情况下禁用ViewPager对某些孩子的分页?

时间:2012-01-13 14:43:07

标签: android android-viewpager

我可以通过扩展ViewPager来禁用ViewPager以使用setPagingEnabled方法,但现在我只是想暂时禁用一个孩子。

我怀疑我必须通过访问ViewPager的setScrollState方法来覆盖OnPageScrolled并取消滚动,但我无法弄清楚如何。

2 个答案:

答案 0 :(得分:7)

这就是我的解决方案:

public class NonSwipeableViewPager extends ViewPager {
    private boolean swipe = true;

    public boolean isSwipe() {
        return swipe;
    }

    public void setSwipe(boolean swipe) {
        this.swipe = swipe;
    }

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

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

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {

        if (swipe) {
            return super.onInterceptTouchEvent(arg0);
        }

        // Never allow swiping to switch between pages
        return false;
    }

}

答案 1 :(得分:1)

这是我为禁用ViewPager第一个页面所做的工作。我没有使用状态变量,而是使用了ViewPager.getAdapter()并检查了是否应该允许滑动:

public class CardViewPager extends ViewPager {

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

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

    @Override
    public void setCurrentItem(int item) {
        if ((((CardFragmentAdapter) this.getAdapter()).isFirstItemDisabled())
                && (item == 0)) {
            Log.d("ViewPager", "You don't wanna see this.");
            return;
        }
        super.setCurrentItem(item);
    }
}

当然,如果您因某些原因不想删除页面,这是合乎逻辑的。

例如,如果要禁用第二项,则可以super.setCurrentItem(item+1)或类似内容。