我有一个带容器的FragmentActivity,我将Fragment与ViewPager放在一起.在ViewPager中我有3个片段:
[MainActivity] [ViewPagerFragment] [Fragment1][Fragment2][Fragment3]
当用户单击Fragment1 / Fragment2 / Fragment3上的按钮时,我将ViewPagerFragment替换为OtherFragment,因此层次结构如下所示:
[MainActivity] [OtherFragment]
当我点击Back按钮时,会重新创建ViewPagerFragment,以及它的嵌套片段(Fragment1 / Fragment2 / Fragment3).
有没有办法保存ViewPagerFragment及其嵌套片段的状态?这样碎片会保持状态而不会重新创建?
我为ViewPagerFragment设置了setRetainInstance(true),但似乎没有生效.
解决方法
只需设置: – 参数是ViewPager中的片段数
mViewPager.setOffscreenPageLimit(3);
ViewPager非常热衷于关闭目前没有使用的东西,这正是这里发生的事情.默认行为是ViewPager在要查看的页面的任一侧“保持”一页,并销毁其余页面.因此,在3页视图中,第3页在选择第1页时被破坏,然后在重新选择第2页时重新创建第3页.正如您所注意到的,第2页只有onCreate(..)被调用一次,因为它始终与当前选定的页面相邻或者是当前所选页面.
要解决此问题,只需设置ViewPager.setOffscreenPageLimit(2)即可.然后ViewPager将保留所有碎片.显然这对于大量碎片来说不是一个好主意,但对于你的情况,它应该没问题.