2013-05-12 13 views
18

私は質問を人間的に可能な限り短く簡単にしておきます。どのように私は特定の項目でViewPagerの子ビューを得ることができます

View activeView = mViewPager.getChildAt(mViewPager.getCurrentItem()); 

現在の項目は、0と1である。しかし、現在のアイテムが2であれば、それはnullを返すとき、子ビューを返します。何故ですか?

編集:私に言い換えてください。 ViewPagerの子ビューを任意の項目位置に取得するにはどうすればよいですか?

答えて

24

getChildAt(int)が正しいアプローチではありませんでした。私がやったことは、そこからViewPagerで使用されるアダプタを取得し、私の意見を見つけました:

adapter = mViewPager.getAdapter(); 
Fragment fragment = adapter.getItem(mViewPager.getCurrentItem()); 

View activeView = fragment.getView(); 

としては、すでにviewPagerだけそうしない限り、現在の子と隣接する子供(のCurrentItem()+/- 1)が含まれています注意しましたsetOffscreenPageLimit()

+15

getItemはpagerAdapterのメソッドではなくなりました – VicVu

+1

@Ronnie Troj imはactiveViewでnullになっています – Erum

+0

不正な状態例外を受け取るこのコードでは、「断片化されたMyFragmentがアクティビティに関連付けられていません」 。 – worked

0

いくつの子ビューが必要ですか?

また、ViewPagerにすべての子が同時にロードされているわけではありません。表示されているものと次のものだけです。 mViewPager.setOffscreenPageLimit()を使用して、例えば3または4を使用して、より多くのアイテムをビューページに追加することができます。

4

あなたのビューページャーアダプターは最大2ページ、つまり2つのビュー/フラグメントを保持しており、残りはリサイクルされています。他のケースでは、あなたが言及しなかったのは、あなたがViewPagerで2ページ/ビューを持つかもしれないということです。

mViewPager.setOffscreenPageLimit()

3

を見てくださいはViewpagerリターンビューにタグを追加します。リンクの下の

がお手伝いします: https://stackoverflow.com/a/20186828/1271891

+0

素晴らしいもの。ビューを動的に生成するためにこれを正確に探します。ありがとう!! –

0

私の努力の間、私は私がmy blogに記載されている番目のOPの問題のための代替ソリューションを定義したと思わアンドロイド景色を飾るする方法を見つけること。私はそれにリンクしているので、コードはここにすべてを含めるために少しすぎるようです。

私が提案する解決策:

  • アダプタを保持し、ビューは完全に
  • 1は、簡単にビューのページャを形成する任意のインデックスを持つビューを照会することができますし、このビューならば、彼はnullのいずれかが返されますを分離現在ロードされていないか、対応するビューです。

(この質問は、私がthe same answerを投稿したthis oneに非常に簡単です)。

関連する問題