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