FragmentPagerAdapter を正しく使用する方法について、多くの疑問があります。アダプターの作成方法やメソッドの実装方法ではなく、基礎となるフラグメントがインスタンス化されたビューを管理する方法に関連しています。
FragmentPagerAdapter に関する Android API では、次のように明示されています。
このバージョンのページャーは、一連のタブなど、通常はより静的なフラグメントをページングする必要がある場合に使用するのに最適です。ユーザーがアクセスする各ページのフラグメントはメモリに保持されますが、そのビュー階層は非表示のときに破棄される場合があります。フラグメントインスタンスは任意の量の状態を保持できるため、これにより大量のメモリが使用される可能性があります。より大きなページ セットの場合は、FragmentStatePagerAdapter を検討してください。
そのため、独自の onCreateView 内のフラグメントによって返されたビューは、Android によって破棄できると想定できます。また、3 つ以上のページがあり、ページ間を切り替えると、各フラグメントの onCreateView が同じフラグメント インスタンスに対して複数回呼び出されることも注目に値します。FragmentPagerAdapter API で指定された例は、このアプローチに最適なようです。
/**
* The Fragment's UI is just a simple text view showing its
* instance number.
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_pager_list, container, false);
View tv = v.findViewById(R.id.text);
((TextView)tv).setText("Fragment #" + mNum);
return v;
}
この例では、フラグメント自体でインスタンス化されたビューへの参照が保持されていないことに注意してください。ただし、ユーザー インタラクションでインターフェイスをさらに更新するために、インスタンス化されたビュー参照を保存する必要があることがよくあります。そのような場合、ドキュメントで提案されているように、ビュー階層は破棄されないと思います(フラグメント状態が破棄されないため)。
この場合、インスタンス化されたビューを保存し、次の onCreateView で再び戻るのは正当なことですか?
ビューを再利用するよりも、ViewPager の setOffscreenPageLimit を使用してメモリに保持されるページ数を増やしたほうがよいでしょうか?
ドキュメントがビュー階層を破棄できることを示唆しているため、疑問が生じますが、フラグメントにビュー参照を保持している場合...ガベージコレクターによって破棄することはできません。私は正しいですよ?