1

ViewPager可変数のフラグメント (タブ) を持つアクティビティがあります。

開始時に、関連する (複雑な) データがロードされているかどうかをアクティビティがチェックします。そうでない場合は、プログレス バー ビューが表示されAsyncTask、データをフェッチする が開始されます。データに応じて、アクティビティは多数のフラグメント (タブ) を作成し、各フラグメントにデータのサブセットを提供します。

私は現在、フラグメントへの参照を保持しています (推奨されていないことはわかっています)。フラグメントが再利用されると、あらゆる種類の問題に遭遇します。フラグメントの間違ったインスタンスにデータを渡してしまいます。

それで、この問題を解決する「アンドロイドの方法」はありますか?

4

1 に答える 1

2

フラグメントが再利用されると、あらゆる種類の問題に遭遇します

フラグメントは通常、ViewPager. これはAdapterView、行がリサイクルされる場所とは異なります。FragmentPagerAdapterまたはを使用するFragmentStatePagerAdapterと、フラグメントは 1 つのページのみを表します。

毎回 ViewPager を再インスタンス化します (ただし、フラグメントは再利用されますか?)

ああ。それは少し違う問題です。

とのストック実装ではFragmentPagerAdapterFragmentStatePagerAdapterいくつかの仮定があります。

  1. 特にトランザクションを実行してフラグメントを UI に追加および削除するという点で、フラグメントを完全に制御します。

  2. これらのフラグメントは、1 つの「論理」によってのみ使用されることViewPager(IOW、ViewPager構成変更のためにそれを再作成することは問題ありませんが、それで十分です)

問題を複雑にしているのは、これらのアダプターが特定のタグの下にフラグメントを保存することです。そのため、それらのフラグメントがまだそれらのタグに存在する場合、新しいフラグメントが作成される代わりに、それらの既存のフラグメントが使用されます。

それで、この問題を解決する「アンドロイドの方法」はありますか?

なぜ「再インスタンス化」する必要があるのか​​ 、あなたの質問からは不明ですViewPager。これは、ある種の更新操作、または 2 番目の段落で説明したプロセスを実行することを強制している何かに関連していると思います。

フラグメントをいじる外部エージェントに対してより友好的であるため、試してみることArrayPagerAdpaterができます。フラグメントのタグを制御するので、正しいフラグメントで作業していることを常に確信できます。フラグメントを自分でキャッシュするのではなく、正しいフラグメントを取得して操作するだけです。

于 2013-07-17T23:04:41.380 に答える