2012-01-13 5 views
2

ViewPager를 확장하여 ViewPager를 사용 중지하고 setPagingEnabled 메소드를 사용할 수 있지만 이제는 자식을 일시적으로 사용 중지하려고합니다.특정 상황에서 특정 하위 페이지에 대한 ViewPager의 페이징을 어떻게 해제합니까?

나는 ViewPager의 setScrollState 메소드에 액세스하여 OnPageScrolled를 재정의하고 스크롤을 취소해야한다고 생각하지만 어떻게 될지 알 수 없습니다.

+0

자녀가 무슨 뜻인지 모르겠습니까? 자녀가 볼 수있는 유형은 무엇입니까? "무력화"는 많은 것을 의미 할 수 있습니다 ...? –

+1

내가 명확하지 않으면 죄송합니다. 자식에 의해 나는 페이지를 의미했는데, 페이징되는 부분. 비활성화는 해당 조각에 대한 페이징을 비활성화하는 것입니다. – Herrbert74

+0

아무도 이것에 대답 할 수 없다고 나는 믿을 수 없다. ViewPager에서 비공개이기 때문에 setScrollState에 액세스 할 수 없다는 것을 알 수있었습니다. 또한 일시적으로 왼쪽으로 스크롤을 사용하지 않으려면 OnPageScrolled에서 왼쪽 스 와이프를 가로 채고 ViewPager에서 onInterceptTouchEvent를 재정의 할 수 있습니다. 그러나 둘을 연결하는 방법은 무엇입니까? – Herrbert74

답변

7

그것을 위해 내 솔루션을 먹으 렴 :

public class NonSwipeableViewPager extends ViewPager { 
    private boolean swipe = true; 

    public boolean isSwipe() { 
     return swipe; 
    } 

    public void setSwipe(boolean swipe) { 
     this.swipe = swipe; 
    } 

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

    public NonSwipeableViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent arg0) { 

     if (swipe) { 
      return super.onInterceptTouchEvent(arg0); 
     } 

     // Never allow swiping to switch between pages 
     return false; 
    } 

} 
+1

아니요, 죄송합니다, 제가 언급 한 setPagingEnabled 메소드이지만 다른 이름을 사용하고 있습니다. 페이지 페이징을 비활성화하는 방법이 필요했습니다. 예를 들어 페이지 # 2에 대한 페이징을 비활성화하고 페이지 # 0 및 # 1에 대한 페이징을 비활성화합니다. – Herrbert74

+0

이것은 정확히 제가 시도한 것입니다. 당신은 xml에서 이와 같이 사용자 정의 UI 요소를 정의하는 방법을 알고 있습니까? xml에서 일반적인 ViewPager를 정의하는 것과 비슷합니까? – bhekman

+0

신경 쓰지 마라, 나는 Google, 롤 수 있습니다! 그것을 발견 : http://stackoverflow.com/questions/2695646/declaring-a-custom-android-ui-element-using-xml 게시물 주셔서 감사! – bhekman

1

이 나는 ​​ViewPager 페이지를 비활성화 한 일이다. 대신 상태 변수를 사용하여, 나는 ViewPager.getAdapter()을 사용하고 내가 슬쩍 허용해야하는 경우가 확인 :

public class CardViewPager extends ViewPager { 

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

    public CardViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public void setCurrentItem(int item) { 
     if ((((CardFragmentAdapter) this.getAdapter()).isFirstItemDisabled()) 
       && (item == 0)) { 
      Log.d("ViewPager", "You don't wanna see this."); 
      return; 
     } 
     super.setCurrentItem(item); 
    } 
} 

어떤 이유로 페이지를 제거하지 않으려면이 단지 논리적 물론입니다.

예를 들어 두 번째 항목을 사용하지 않으려면 super.setCurrentItem(item+1) 또는 비슷한 것을 사용할 수 있습니다.

관련 문제