滑动视图寻呼机片段不应移动选项卡

时间:2017-10-04 15:34:26

标签: android android-fragments android-tablayout

我的程序有一个布尔变量名“isCorrect”。我想,当isCorrect为false时,用户不应该打开任何其他选项卡。 (通过滑动或选择标签)。我尝试通过以下给定的逻辑来执行此操作,但这会导致应用程序挂起。

final boolean isCorrect=false;

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {

                if(!isCorrect){
                    if(tab.getPosition()==1){
                        mViewPager.setCurrentItem(0);
                    }
                }else{
                   mViewPager.setCurrentItem(1);
                }

            }

1 个答案:

答案 0 :(得分:1)

定义自定义ViewPager子类。该类继承自ViewPager,并包含一个名为setSwipeable的新方法,用于控制是否启用滑动事件。确保更改布局文件。

public class LockableViewPager extends ViewPager {

    private boolean swipeable;

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

    public LockableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.swipeable = true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (this.swipeable) {
            return super.onTouchEvent(event);
        }

        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (this.swipeable) {
            return super.onInterceptTouchEvent(event);
        }

        return false;
    }

    public void setSwipeable(boolean swipeable) {
        this.swipeable = swipeable;
    }
}

当flag为false时,禁用滑动。

 if (!flag) {
        mViewPager.setSwipeable(false);
    } else {
        mViewPager.setSwipeable(true);
    }