2012-01-13 9 views
2

ViewPagerを拡張してViewPagerを無効にして、setPagingEnabledメソッドを持たせることもできましたが、今は子を一時的に無効にしたいだけです。特定の状況で特定の子にViewPagerのページングを無効にするにはどうすればよいですか?

私はViewPagerのsetScrollStateメソッドにアクセスしてOnPageScrolledをオーバーライドしてスクロールをキャンセルする必要があると思われますが、どのように把握できません。そのために私の解決策のthats

+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要素を定義する方法を知っていますか?同様の方法で、通常のViewPagerをXMLで定義することができますか? – 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); 
    } 
} 

あなたには、いくつかの理由でページを削除したくない場合は、これが唯一の論理的です。

たとえば、2番目のアイテムを無効にしたい場合は、super.setCurrentItem(item+1)などとすることができます。

関連する問題