我有一个包含片段“列表”的活动,单击其中一个项目时,它会将自身替换为“内容”片段。当用户使用后退按钮时,他再次被带到“列表”片段。
问题是片段处于其默认状态,无论我尝试什么持久化数据。
事实:
- 两个片段都是通过
public static TheFragment newInstance(Bundle args)
,setArguments(args)
和Bundle args = getArguments()
- 两个片段都在同一级别,直接位于
FrameLayout
父活动的 a 内部(即不是嵌套片段) - 我不想打电话
setRetainInstance
,因为我的活动是一个主/细节流,它在较大的屏幕上有一个 2 窗格布局。7" 平板电脑有 1 个纵向窗格和 2 个横向窗格。如果我保留“列表”片段实例,它会(我认为)屏幕旋转搞砸 - 当用户点击'list'片段中的一个项目时,'content'片段通过 显示
FragmentTransaction#replace(int, Fragment, String)
,具有相同的ID但不同的标签 - 我确实覆盖了
onSaveInstanceState(Bundle)
,但这并不总是由框架调用,根据文档:“在许多情况下,片段可能大部分被拆除(例如当放置在没有显示 UI 的后堆栈上时),但它的状态在其拥有的活动实际需要保存其状态之前,不会被保存。” - 我正在使用支持库
从上面的第5条,我猜低端设备需要在片段事务后恢复内存可能会调用Fragment#onSaveInstanceState(Bundle)
. 但是,在我的测试设备(Galaxy Nexus 和 Nexus 7)上,该框架不会调用该方法。所以这不是一个有效的选择。
那么,我怎样才能保留一些片段数据呢?传递给Fragment#onCreate
,Fragment#onActivityCreated
等的包总是null
.
因此,我无法从全新的片段启动到回栈恢复。
注意:可能相关/重复的问题