在活动被保存/恢复片段堆栈

时间:2015-09-03 12:40:26

标签: android fragment

在我的项目中,有活动和碎片。并且有一个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实例,而是关于将片段保存在堆栈中。

2 个答案:

答案 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和其他人。