SO和Google围绕着这个话题有很多喧嚣,请耐心等待。
执行片段到片段导航时,会看到此生命周期:
Fragment1: onPause
Fragment1: onStop
Fragment1: onDestroyView
Fragment2: onCreateView
Fragment2: onStart
Fragment2: onResume
(您可以在这张照片中看到这是从here被盗的)
由于Fragment实例仍然存在,因此没有对Fragment.onSaveInstanceState
的调用-仅其视图已被破坏。
因此,哪种机制可以保存View的状态并进行还原,以及如何?
onSaveInstanceState将根据文档被调用:
对于应用程序,此方法将在onStop()之后发生以Build.VERSION_CODES.P开头的定位平台。对于针对较早平台版本的应用程序,此方法将发生在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