FragmentPagerAdapter
との違いは何ですかFragmentStatePagerAdapter
?
FragmentPagerAdapter
Google のガイドには次のように書かれています:
このバージョンのページャーは、タブのセットなど、ページングするフラグメントが通常より静的である場合に最適です。ユーザーがアクセスする各ページのフラグメントはメモリ内に保持されますが、そのビュー階層は表示されていない場合に破棄される可能性があります。フラグメント インスタンスは任意の量の状態を保持できるため、大量のメモリが使用される可能性があります。ページ セットが大きい場合は、 を検討してください
FragmentStatePagerAdapter
。
そしてについてFragmentStatePagerAdapter
:
このバージョンのページャーは、ページ数が多い場合に、リスト ビューのように動作してより便利です。ページがユーザーに表示されない場合は、そのフラグメント全体が破棄され、そのフラグメントの保存された状態のみが保持されます。これにより、ページ間の切り替え時にオーバーヘッドが増加する可能性を
FragmentPagerAdapter
犠牲にすることに比べて、ページャーは、アクセスした各ページに関連付けられたメモリをはるかに少なく保持できます。
つまり、フラグメントは 3 つだけです。ただし、それらはすべて、大量のデータを含む個別のモジュールです。
Fragment1
は、(ユーザーが入力する)データを処理し、アクティビティを介して に渡しますFragment2
。 は単純な ですListFragment
。Fragment3
も ですListFragment
。
私の質問は次のとおりです: どのアダプターを使用すればよいですか?FragmentPagerAdapter
またはFragmentStatePagerAdapter
?
ベストアンサー1
ドキュメントにもあるように、このように考えてください。ブックリーダーのようなアプリケーションを作成する場合、すべてのフラグメントを一度にメモリにロードすることは望ましくありませんFragments
。ユーザーが読んでいるときにロードして破棄する必要があります。この場合は を使用しますFragmentStatePagerAdapter
。 大量の重いデータ ( などBitmaps
) を含まない 3 つの「タブ」を表示するだけの場合は、が適している可能性があります。また、デフォルトでは が 3 つのフラグメントをメモリにロードするFragmentPagerAdapter
ことにも注意してください。最初に述べたように、階層を破棄して必要に応じて再ロードする可能性があります。2 番目はの状態のみを保存して完全に破棄します。その後、ユーザーがそのページに戻ると、状態が取得されます。ViewPager
Adapter
View
Adapter
Fragment