我环顾四周,发现了这个问题的变体,但所有答案似乎都是丑陋的黑客。有没有简单而正确的方法来实现这一目标?
比如说我有Activity A
,它有一个FrameLayout
可以一次保存一个片段。可以说,当 Activity 首次启动时,它会加载Fragment A
到FrameLayout
由ListView
. 当一个项目被选中时,Fragment A
它就会启动Fragment B
。我目前这样做的方式是简单地隐藏Fragment A
然后添加Fragment B
,因为这会保留Fragment A
的状态。我当然也将此片段事务添加到backstack
.
所以现在Fragment A
存在于backstack
. 现在假设我回到我的 Android 主屏幕并转到另一个应用程序。当我这样做时,Android 系统决定销毁我的应用程序,因为系统需要更多内存。当我导航回我的应用程序时,我应该如何正确恢复当前在后台堆栈中的状态Fragment B
。Fragment A
我不能使用setRetainInstance()
,因为它不适用于Fragments
放置在 backstack 上。
本质上,我要做的是将backstack
应用程序强制关闭之前的状态恢复到完全一样。所以Fragment A
应该在backstack
(但不显示),并且Fragment B
应该当前显示。如果我点击后退按钮,它应该会正确弹出Fragment A
.backstack
一些笔记
由于应用程序被强制关闭,它是savedInstanceState != null
. 同样的事情也适用于片段。