2017-10-04 105 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如果你可以解釋我的問題情況可能是我可以幫助更多。 –

相關問題