2017-10-04 101 views
0

我的程序有一个布尔变量名称“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); 
       } 

      } 

回答

0

定义自定义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; 
    } 
} 

当标志为false时禁用滑动。

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

Zohra Khan你很棒,但它不会按我的要求工作。只有当用户在屏幕上滑动时才能识别标志的值。那么它将如何工作,请你多解释一下。 – Dosti

+0

@Dosti如果你可以解释我的问题情况可能是我可以帮助更多。 –

相关问题