SavedInstanceState 始终为空,即使它有一个 id
SavedInstanceState is always null even though it has an id
我找到了这个问题的许多答案,但其中 none 似乎有效。这是 Activity
:
中的代码
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putString(CUR_TASK, curTask);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
如您所见,super.onSaveInstanceState(savedInstanceState)
在末尾,因此应该可以。我的布局确实有一个 id
,所以它也应该没问题:
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
仍然,当我调用 startActivity
去另一个 Activity
和 return 返回(使用 ActionBar
)时,savedInstanceState
包在 onCreate
为空。
如果当您将应用程序置于后台并返回时,onCreate 中的实例状态不为空,我的猜测是,当您从返回堆栈返回 activity 时,它会被重新创建。
将您的 Activity 启动模式设置为 singleTop 以获得更好的公正性
link
来自 activity lifecycle 上的文档:
Note: Because onSaveInstanceState() is not guaranteed to be called, you should use it only to record the transient state of the activity (the state of the UI)—you should never use it to store persistent data. Instead, you should use onPause() to store persistent data (such as data that should be saved to a database) when the user leaves the activity.
方法onSaveInstanceState
不用于您的目的,它用于屏幕旋转等情况下以保存UI状态。
当第一个 Activity
启动第二个并使用 onActivityResult()
.
再次传回值时,您必须切换通过意图传递值的逻辑
此外,我建议您不在 onCreate()
中恢复您的状态,而是在 onRestoreInstanceState(Bundle savedInstanceState)
中恢复您始终确定您的 savedInstanceState
Bundle
不是空。
我找到了这个问题的许多答案,但其中 none 似乎有效。这是 Activity
:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putString(CUR_TASK, curTask);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
如您所见,super.onSaveInstanceState(savedInstanceState)
在末尾,因此应该可以。我的布局确实有一个 id
,所以它也应该没问题:
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
仍然,当我调用 startActivity
去另一个 Activity
和 return 返回(使用 ActionBar
)时,savedInstanceState
包在 onCreate
为空。
如果当您将应用程序置于后台并返回时,onCreate 中的实例状态不为空,我的猜测是,当您从返回堆栈返回 activity 时,它会被重新创建。
将您的 Activity 启动模式设置为 singleTop 以获得更好的公正性 link
来自 activity lifecycle 上的文档:
Note: Because onSaveInstanceState() is not guaranteed to be called, you should use it only to record the transient state of the activity (the state of the UI)—you should never use it to store persistent data. Instead, you should use onPause() to store persistent data (such as data that should be saved to a database) when the user leaves the activity.
方法onSaveInstanceState
不用于您的目的,它用于屏幕旋转等情况下以保存UI状态。
当第一个 Activity
启动第二个并使用 onActivityResult()
.
此外,我建议您不在 onCreate()
中恢复您的状态,而是在 onRestoreInstanceState(Bundle savedInstanceState)
中恢复您始终确定您的 savedInstanceState
Bundle
不是空。