在 RestoreInstanceState 上的 android 片段

是我遗漏了什么还是 Fragment没有 onRestoreInstanceState()方法?如果没有,我如何去获得类似的东西?

78814 次浏览

片段没有 onRestoreInstanceState方法。

您可以在 onActivityCreated中获得相同的结果,它接收具有保存的实例状态(或 null)的 bundle。

检查源代码 给你

在片段指南的 ListFragment 例子中,你可以找到:

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("curChoice", mCurCheckPosition);
}

你可以这样使用:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
// Restore last state for checked position.
mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
}
}

在片段从堆栈返回之后调用 onActivityCreated()

我知道,你已经接受了答案,但是你应该读一下 关于碎片的官方文件,它说(“处理片段生命周期”一段) :

您可以使用 Bundle 保留片段的状态,以防活动的进程被终止,并且在重新创建活动时需要恢复片段状态。您可以在片段的 onSaveInstanceState ()回调期间保存状态,并在 onCreate ()、 onCreateView ()或 onActivityCreated ()期间恢复状态

因此,您可以使用最适合您的方法: onCreate()onCreateView()onActivityCreated()

FragmentonViewStateRestored 相当于 ActivityonRestoreInstanceState,但它在 onActivityCreated(Bundle)之后和 onStart()之前被称为 onRestoreInstanceState