我对如何正确使用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中保留任何视图引用......它们不能被垃圾收集器销毁 . 我是对的?