3

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 を使用してメモリに保持されるページ数を増やしたほうがよいでしょうか?

ドキュメントがビュー階層を破棄できることを示唆しているため、疑問が生じますが、フラグメントにビュー参照を保持している場合...ガベージコレクターによって破棄することはできません。私は正しいですよ?

4

0 に答える 0