首页 > 解决方案 > 什么机制导致在 Fragment 到 Fragment 导航中调用 View.onSaveInstanceState?

问题描述

SO和Google上围绕这个主题有很多噪音,所以请耐心等待。

执行Fragment 到 Fragment导航时,您会看到以下生命周期:

Fragment1: onPause
Fragment1: onStop
Fragment1: onDestroyView

Fragment2: onCreateView
Fragment2: onStart
Fragment2: onResume

(你可以在这张从这里偷来的照片中看到这个) 在此处输入图像描述

没有调用 aFragment.onSaveInstanceState因为 Fragment 实例仍然存在 - 只有它的视图已被破坏。

因此,什么机制可以保存视图的状态并恢复它,以及如何?

标签: androidandroid-fragmentsandroid-viewandroid-lifecycle

解决方案


onSaveInstanceState 将根据文档调用:

对于面向以 Build.VERSION_CODES.P 开头的平台的应用程序,此方法将在 onStop() 之后发生。对于针对早期平台版本的应用程序,此方法将在 onStop() 之前发生,并且不能保证它是否会在 onPause() 之前或之后发生。

在 onSaveInstanceState 中,您可以将要保留的所有数据放在包中

override fun onSaveInstanceState(outState: Bundle) {
// put data you want to persist to outState
super.onSaveInstanceState(outState)

}

然后onCreate您可以检查是否需要恢复您的持久数据:

  override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState == null) {
  // activity created for the first time
} else {
  // activity re-created, restore data from savedInstanceState
}

}

您还可以在此处阅读更多相关信息: https ://developer.android.com/topic/libraries/architecture/saving-states


推荐阅读