2017-10-04 8 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 제게 설명 할 수 있다면 문제의 시나리오가 더 도움이 될 수 있습니다. –