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