android片段onRestoreInstanceState

时间:2011-03-23 23:00:39

标签: android save state android-fragments

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

5 个答案:

答案 0 :(得分:188)

片段没有onRestoreInstanceState方法。

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

检查源代码here

答案 1 :(得分:38)

我知道,你已经接受了答案,但是你应该阅读official documentation about fragments,它会说(段落#34;处理片段生命周期"):

  

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

期间恢复它。

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

答案 2 :(得分:25)

在片段指南的ListFragment example中,您可以找到:

@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()

答案 3 :(得分:10)

Fragment的{​​p} onViewStateRestored相当于onRestoreInstanceState的{​​{1}}。但它在Activity之后和onActivityCreated(Bundle)之前调用。

答案 4 :(得分:0)

onActivityCreated is deprecated。我发现它在片段生命周期方面令人困惑。只需这样做:

@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
    }
    }