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