1. ホーム
  2. アンドロイド

[解決済み】FragmentPagerAdapterとFragmentStatePagerAdapterの違いは何ですか?

2022-03-24 17:22:34

質問

とはどのような違いがあるのでしょうか? FragmentPagerAdapterFragmentStatePagerAdapter ?

について FragmentPagerAdapter Googleのガイドにはこうあります。

このバージョンのページャーは、少数の のセットなど、ページングされるべき、通常より静的なフラグメントです。 タブがあります。ユーザーがアクセスする各ページのフラグメントは しかし、そのビュー階層は表示されていないときに破棄されることがあります。 このため、大量のメモリを使用することになります。 インスタンスは、任意の量の状態を保持することができる。より大きなセットの場合 を考えてみてください。 FragmentStatePagerAdapter .

そして、約 FragmentStatePagerAdapter :

このバージョンのページャーは、ページャーが大量にある場合に便利です。 のページがあり、よりリストビューに近い形で動作します。ページが表示されていないときは のみを残し、そのフラグメント全体を破棄することができます。 そのフラグメントの保存状態。これにより、ページャーは、そのフラグメントの保存された状態を と比較して、訪問した各ページに関連するメモリが少なくなります。 FragmentPagerAdapter のオーバーヘッドが大きくなる可能性がありますが、その代償として ページを切り替えることができます。

だから、3つのフラグメントしかないんです。しかし、そのすべてが大量のデータを持つ独立したモジュールなのです。

Fragment1 は、(ユーザーが入力した)いくつかのデータを処理し、アクティビティを通じて Fragment2 であり、単なる ListFragment . Fragment3 はまた ListFragment .

そこで質問なのですが : どのアダプターを使えばいいのでしょうか? FragmentPagerAdapter または FragmentStatePagerAdapter ?

解決方法は?

ドキュメントに書いてあるように、こう考えてみてください。ブックリーダーのようなアプリケーションを作る場合、すべてのフラグメントを一度にメモリにロードしたくはないでしょう。例えば Fragments を読むようにします。この場合 FragmentStatePagerAdapter . もし、重いデータを含まない3つのタブ(例えば Bitmaps ) の場合 FragmentPagerAdapter がよく似合うかもしれません。また、次のことも覚えておいてください。 ViewPager は、デフォルトで3つのフラグメントをメモリにロードします。最初の Adapter を破壊する可能性があります。 View 階層を作成し、必要なときにそれを再ロードします。 Adapter の状態を保存するだけです。 Fragment で、完全に破棄します。もしユーザーがそのページに戻ってきたら、その状態を取り戻します。