2017-10-04 3 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あなたが私に説明することができれば、問題のシナリオがもっと助けることができるかもしれません。 –

関連する問題