Android 使用FragmentPagerAdapter恢复片段

Android 使用FragmentPagerAdapter恢复片段,android,android-layout,android-fragments,tabs,fragmentpageradapter,Android,Android Layout,Android Fragments,Tabs,Fragmentpageradapter,我有一个使用两个选项卡的应用程序,两个选项卡都包含片段。我正在使用FragmentPagerAdapter管理选项卡更改。使用两个选项卡,所有这些都可以正常工作 我最近增加了第三个标签,有点麻烦。表1(片段1)是由小片段组成的线性布局。tab2(fragment2)是一种简单的文本布局。tab3(fragment3)也是一种简单的文本布局 如果我在tab1和tab2之间切换,两者都能正常工作并保持其状态。但是,如果在tab1和tab3之间切换,tab3将正确显示文本,而tab1将显示空白选项卡

我有一个使用两个选项卡的应用程序,两个选项卡都包含片段。我正在使用FragmentPagerAdapter管理选项卡更改。使用两个选项卡,所有这些都可以正常工作

我最近增加了第三个标签,有点麻烦。表1(片段1)是由小片段组成的线性布局。tab2(fragment2)是一种简单的文本布局。tab3(fragment3)也是一种简单的文本布局

如果我在tab1和tab2之间切换,两者都能正常工作并保持其状态。但是,如果在tab1和tab3之间切换,tab3将正确显示文本,而tab1将显示空白选项卡

我知道,如果标签偏离当前位置超过1个位置,碎片将被销毁,碎片将需要重新创建。
FragmentPagerAdapter
是否不会自动执行此操作

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

作为一种解决方法,我设置了
myViewPager.setOffscreenPageLimit(2)
,并保留了布局。我想让它按照我认为应该的那样工作,而不强迫片段留在记忆中

添加

setRetainInstance(true);

在片段的
onCreateView
方法中

读取setOffScreenPageLimit()的文档,我认为您的方法很好。看看这个:

如果您有少量页面(3-4页),则可以始终保持活动状态 一次,新创建的视图在布局上花费的时间会更少 子树作为用户页面来回移动

您应该将此限制保持在较低的水平,尤其是当您的页面具有复杂的 布局


我很好奇setRetainInstance(true)是否有效,因为是适配器决定重新创建片段,而不是在某些Android更改配置操作中重新创建片段。

我已经在tab1片段上设置了setRetainInstance(true),但是我想我可能没有在tab片段中嵌入的片段上设置它。主片段确实存在,该选项卡的菜单项被正确创建,只是布局没有呈现。我需要使用布局检查器进行更深入的挖掘。我已经检查并在选项卡片段及其嵌套子项上设置了“SetRetainInstance”。我在该选项卡上有一个“添加”函数,如果我使用它,就会创建新的子片段。这似乎是一个与正确恢复子片段相关的问题。需要做更多的挖掘