FragmentPagerAdapter和OffScreenLimit设置为1的ViewPager以及FragmentStatePagerAdapter之间的区别是什么?

10
FragmentPagerAdapter与设置OffScreenLimit为1的ViewPager和FragmentStatePagerAdapter有何区别?
Google指南中关于FragmentPagerAdapter的表述是:这个Pager版本最适合在需要翻页浏览一小部分通常比较静态的片段(例如一组选项卡)时使用。用户访问每个页面的片段将保留在内存中,尽管其视图层次结构可能会在不可见时被销毁。由于片段实例可能持有任意数量的状态,因此这可能导致使用大量的内存。对于更大的页面集,请考虑使用FragmentStatePagerAdapter。
而关于FragmentStatePagerAdapter,上面的指南提到:这个Pager版本在页面数量较大时更有用,类似于ListView的工作方式。当页面对用户不可见时,它们的整个fragment可以被销毁,仅保存该fragment的已保存状态。这允许Pager保存与访问的每个页面相关联的内存要少得多,相对于FragmentPagerAdapter来说代价是切换页面时可能需要更高的开销。
如果我将offscreenlimit设置为1,则会销毁当前片段以外的下一个两个片段之外的所有片段,并且它的行为类似于FragmentStatePagerAdapter。这个理解正确吗?

1个回答

11

它们的不同正如文档中所写。但可能有点令人困惑。

FragmentPagerAdapter会在其片段在不可见时(即当它们超出屏幕范围时)将它们保存在FragmentManager中处于分离状态,而FragmentStatePagerAdapter则从FragmentManager中删除它们。

offscreenPageLimit有些不同。其中所有片段都保持连接到UI。一旦它们超出了范围,它们就会被移除分离

您可以在FragmentPagerAdapter(第121行)和FragmentStatePagerAdapter(第144行)的源代码中看到它们的不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接