在屏幕方向改变时保留Fragment的后退栈

6

施工

我有一个包含由Fragments组成的“路径”的Activity。用户从Fragment1Fragment2再到Fragment3,填写所需的信息。这里没有什么花哨的内容,只是在Fragments上使用简单的backStack.replace

问题

当屏幕方向改变时,该如何保留信息以使我的backStack恢复到之前的状态?

想法

我唯一的想法就是在saveInstanceState中插入最后可见的片段,并从那里重新创建所有内容,但这感觉很欺骗性,我认为长期来看会产生一些重大问题。

/////////////更新//////////////

现在看来,只要你遵循文章提供的指南,Android现在可以自行处理它。

1个回答

4

后退栈(backstack)会随着活动(activity)的保存和加载而自动保存和加载。

这篇文章详细介绍了Android如何保存和加载活动和片段(fragment)状态。你需要关注的是为每个片段实现相同的保存和恢复状态的逻辑。


自从v0.10.0版本以来,StatedFragment现在已被标记为弃用:C但它引导我到这里http://inthecheesefactory.com/blog/fragment-state-saving-best-practices/en - JakubW
你说得对,我没有注意到。为了以后的参考,我会更新我的答案。 - Daniel Zolnai
在后续文章中,作者没有解决我的问题,而是解释了当前如何重新创建片段。它没有提供有关如何保留来自“backStack”的数据的信息。现在,该库仅提供工具来在嵌套片段中接收“onActivityResult”。 - JakubW
如果我理解正确的话,后退栈应该自动保存和加载,无需编写任何代码。您只需要单独处理每个片段的视图即可。 - Daniel Zolnai
惊讶的是,它确实起作用了。我很困惑,因为在保留实例后SupportFragmentManager计数总是1。看来问题已经解决了。感谢你的帮助,伙计。 - JakubW
我已将您的答案标记为已接受,但您需要删除有关库的信息。这可能会导致潜在读者产生误解,因为它与问题无关。 - JakubW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接