在我的项目中,有活动和碎片。并且有一个Fragment backstack。
我的问题是如果操作系统破坏了活动,如何保存/恢复片段堆栈。
@forcewill你关于addToBackStack吗?是的,我做到了。我不是在讨论弹出式最顶层片段,如果背压的话。我正在谈论在Activity被破坏的情况下恢复片段堆栈。
@Derek,我确实按照你的方式将以下内容写入每个片段和活动以覆盖onStaveInstanceState(...)
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
但似乎它仍无效。
我已经测试过了 - 采用Android 4.1的Galaxy S3 - 使用Android 5.1的模拟器(打开名为“不要保持活动”的调试选项
@josedlujan,它不是关于保存单个Fragment实例,而是关于将片段保存在堆栈中。
答案 0 :(得分:0)
使用savedInstanceState
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
...
if (savedInstanceState != null) {
//Restore the fragment's state here
}
}
...
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//Save the fragment's state here
}
答案 1 :(得分:0)
Derek Fung是正确的。只要片段被添加到backstack,片段backstack将由系统维护。
我是愚蠢的,我在活动中的onResume / onCreate中做了一些事情,这导致清理已经恢复的片段backstack。
关闭此
我是如何犯这个愚蠢的错误的
public class MyActivity {
....
onResume() {
bottomBar.setDefaultIfNotSet();
}
....
}
onResume中的方法将清除Fragment Backstack。在BottomBar中,我没有在Activity destroy上保存它的状态。因此,在恢复活动时,此视图不知道它实际上已恢复“不是从头开始创建”
谢谢Derek和其他人。