使用FragmentPagerAdapter恢复片段

时间:2014-01-20 08:11:27

标签: android android-layout android-fragments tabs fragmentpageradapter

我有一个使用两个标签的应用程序,都包含片段。我正在使用FragmentPagerAdapter来管理选项卡更改。一切正常,有两个标签。

我最近添加了第三个标签,但遇到了一些麻烦。 tab1(fragment1)是一个小片段的LinearLayout。 tab2(fragment2)是一个简单的文本布局。 tab3(fragment3)也是一个简单的文本布局。

如果我在tab1和tab2之间切换都能正常工作并保持其状态。但是,如果我在tab1和tab3之间切换,tab3会正确显示文本,但tab1会显示一个空白标签。

我知道如果一个标签超出当前位置的1个位置,则该片段将被销毁,并且需要重新创建该片段。 FragmentPagerAdapter不会自动执行此操作吗?

我发现如果我旋转设备(选择了tab1),tab1片段将以正确的状态恢复,因此片段不会被破坏。似乎ViewPager没有正确地重新创建布局存在问题,但这只是猜测。

作为一种解决方法,我设置myViewPager.setOffscreenPageLimit(2)并保留布局。我想让它工作,因为我认为它应该没有强制片段留在内存中。

2 个答案:

答案 0 :(得分:0)

添加

setRetainInstance(true);

在片段的onCreateView方法

答案 1 :(得分:0)

读取setOffScreenPageLimit()的文档,让我觉得你的方法很好。看看这个:

  

如果你有少量的页面(3-4),你可以保持活动状态   一次,新创建的视图布局花费的时间会减少   子树作为用户来回翻页。

     

您应该保持此限制,特别是如果您的网页很复杂   布局。

我很好奇,如果setRetainInstance(true)可以工作,因为适配器决定重新创建一个片段而不是在某些Android更改配置操作期间重新创建它。