我有一个使用两个标签的应用程序,都包含片段。我正在使用FragmentPagerAdapter来管理选项卡更改。一切正常,有两个标签。
我最近添加了第三个标签,但遇到了一些麻烦。 tab1(fragment1)是一个小片段的LinearLayout。 tab2(fragment2)是一个简单的文本布局。 tab3(fragment3)也是一个简单的文本布局。
如果我在tab1和tab2之间切换都能正常工作并保持其状态。但是,如果我在tab1和tab3之间切换,tab3会正确显示文本,但tab1会显示一个空白标签。
我知道如果一个标签超出当前位置的1个位置,则该片段将被销毁,并且需要重新创建该片段。 FragmentPagerAdapter
不会自动执行此操作吗?
我发现如果我旋转设备(选择了tab1),tab1片段将以正确的状态恢复,因此片段不会被破坏。似乎ViewPager
没有正确地重新创建布局存在问题,但这只是猜测。
作为一种解决方法,我设置myViewPager.setOffscreenPageLimit(2)
并保留布局。我想让它工作,因为我认为它应该没有强制片段留在内存中。
答案 0 :(得分:0)
添加
setRetainInstance(true);
在片段的onCreateView
方法
答案 1 :(得分:0)
读取setOffScreenPageLimit()的文档,让我觉得你的方法很好。看看这个:
如果你有少量的页面(3-4),你可以保持活动状态 一次,新创建的视图布局花费的时间会减少 子树作为用户来回翻页。
您应该保持此限制,特别是如果您的网页很复杂 布局。
我很好奇,如果setRetainInstance(true)可以工作,因为适配器决定重新创建一个片段而不是在某些Android更改配置操作期间重新创建它。