Android FragmentPagerAdapter和Fragment的视图生命周期

时间:2014-04-08 17:08:50

标签: android android-fragments android-viewpager fragmentpageradapter fragmentstatepageradapter

我对如何正确使用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;
    }

请注意,在此示例中,如何不对Fragment本身中的实例化视图进行任何引用。但是,通常需要保存实例化的视图引用,以便通过用户交互进一步更新界面。在这种情况下,我认为视图层次结构不会像文档中建议的那样被销毁(因为片段状态不会被破坏)。

在这种情况下是否合法保存实例化视图并在下一个onCreateView中再次返回?

使用ViewPager中的setOffscreenPageLimit来增加内存中保留的页数而不是重用视图会更好吗?

我怀疑是因为文档表明可以销毁视图层次结构,但如果你在Fragment中保留任何视图引用......它们不能被垃圾收集器销毁。我是对的?

0 个答案:

没有答案