2017-03-16 14 views
3

viewpagerの項目0〜2から子ビューを取得すると、正常に動作します。 3歳以降の子ビューを取得しようとすると、nullが返されます。どのように私はviewpagerの現在選択されているすべての子ビューを取得できますか?Viewpagerで現在選択されている項目の子ビューを取得する

編集:

View view = viewPager.getChildAt(viewPager.getCurrentItem()); 

viewPager.getCurrentItemは()以降3に達したとき、ビューリターンヌル。

+0

を登録することができ、あなたが質問を明確にするために使用しているコードを投稿することができますか? – zsmb13

+0

ビューページ内に読み込むフラグメントの数はいくつですか? –

+0

@JaydeepPatel 5 –

答えて

2

ViewPagerで使用しているFragmentsにアクセスする必要があります。

https://stackoverflow.com/a/39274141/1559852ViewPager'sアダプターを変更する方法について説明しました。ViewPagerで使用するフラグメントをアクセス可能にしました。

リンクでコードを実装すると、フラグメントとそのビューにアクセスできるようになります。

は、以下のようなあなたのかけらにパブリックメソッドを定義します。

public View getMyFragmentView(){ 
    return this.mView(); 
} 

は最後に次のコードのようなあなたのViewPagerOnPageChangeLsitenerを追加します。

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      // Here's your instance 
      final YourFragment fragment =(YourFragment)yourPagerAdapter.getRegisteredFragment(position); 
      final View theViewYouWantToAccess = yourFragment.getMyView(); 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

編集:あなたのViewPagerアダプタでは、Fragment

SparseArray
@Override 
public Fragment getItem(int position) { 
    final YourFragment fragment = new YourFragment(); 

    // Register your fragment to Sparse Array here 
    registeredFragments.put(position, fragment); 

    return fragment; 
} 
+0

ご返信ありがとうございます。しかし、最初にsparseArrayにすべてのフラグメントを初期化できますか? –

+0

これは必要ありません。アダプタのgetItemメソッドで新しいフラグメントを返すときに、それを疎配列に追加するだけです。私は私の答えを編集します。 – savepopulation

+0

ありがとう、私はそれを試してみる)= –

関連する問題