android片段onRestoreInstanceState

Sha*_*aun 116 android state save android-fragments

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

mgv*_*mgv 193

片段没有onRestoreInstanceState方法.

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

这里查看源代码.

  • 这不是一致的设计,是吗? (84认同)
  • 这还不会照顾恢复片段吗?它适用于配置更改,但是如果从片段转到活动然后返回到片段会怎么样? (4认同)
  • @EhteshChoudhury Android 应用程序开发中没有什么是“一致的设计”。一切都搞砸了,一切都被“弃用”了。 (4认同)
  • onActivityCreated() 不是恢复片段状态的唯一方法。您可以在 onCreate()、onCreateView() 或 onActivityCreated() 期间恢复它。http://developer.android.com/guide/components/fragments.html (3认同)
  • `Fragment` 类中的 `onActivityCreated` 现已被弃用。请参阅此[帖子](/sf/answers/4345386391/)了解如何处理该问题。 (2认同)

jim*_*zer 42

我知道,你已经接受了答案,但你应该阅读有关片段官方文档,并且它说(处理片段生命周期段落):

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

所以,你可以用最适合您:onCreate(),onCreateView()onActivityCreated()


Gau*_*rji 25

在Fragments指南的ListFragment 示例中,您可以找到:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}
Run Code Online (Sandbox Code Playgroud)

您可以这样使用:

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

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


nhk*_*anh 13

onViewStateRestoredFragment是相当于onRestoreInstanceStateActivity.但它被称为onActivityCreated(Bundle)之前和之后onStart().