131

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

4

5 回答 5

214

片段没有onRestoreInstanceState方法。

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

在此处查看源代码。

于 2011-03-24T00:28:13.707 回答
50

我知道,您已经接受了答案,但您应该阅读有关 Fragment 的官方文档,上面写着(“处理 Fragment 生命周期”段落):

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

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

于 2014-12-10T14:37:09.233 回答
30

在 Fragments 指南的 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()在片段从堆栈返回后调用。

于 2014-05-07T12:27:29.900 回答
20

onViewStateRestoredofFragment等价onRestoreInstanceStateActivity。但它被称为 afteronActivityCreated(Bundle)和 before onStart()

于 2016-06-25T07:56:28.817 回答
3

onActivityCreated 已弃用。我发现它只是在片段生命周期方面令人困惑。这样做:

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

// 进而:

  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
    savedIInistanceState?.let{ 
//restore the data here
    }
    }
于 2020-09-22T09:56:22.200 回答