Как отключить подкачку ViewPager в определенных обстоятельствах для определенных детей? - PullRequest
2 голосов
/ 13 января 2012

Я мог бы отключить ViewPager с расширением ViewPager, чтобы иметь метод setPagingEnabled, но теперь я просто хочу временно отключить ребенка.

Я подозреваю, что мне нужно переопределить OnPageScrolled и отменить прокрутку, используя метод ViewScager setScrollState, но я не могу понять, как.

Ответы [ 2 ]

7 голосов
/ 02 мая 2012

вот мое решение для этого:

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 голос
/ 31 мая 2012

Это то, что я сделал, чтобы отключить первую страницу 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) или что-то подобное.

...