android - 什么机制导致在 Fragment 到 Fragment 导航中调用 View.onSaveInstanceState?
问题描述
SO和Google上围绕这个主题有很多噪音,所以请耐心等待。
执行Fragment 到 Fragment导航时,您会看到以下生命周期:
Fragment1: onPause
Fragment1: onStop
Fragment1: onDestroyView
Fragment2: onCreateView
Fragment2: onStart
Fragment2: onResume
(你可以在这张从这里偷来的照片中看到这个)
没有调用 aFragment.onSaveInstanceState
因为 Fragment 实例仍然存在 - 只有它的视图已被破坏。
因此,什么机制可以保存视图的状态并恢复它,以及如何?
解决方案
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
推荐阅读
- php - 如何检测一周的第一天是周六、周日还是周一?
- elasticsearch - 使用同义词分析器时弹性搜索的奇怪结果
- sql - SCD2 与事实表实现
- sql - 如何在 Postgresql 的一行中获取第一个和最后一个值
- python - 从逐行计算计算熊猫数据框中的新列
- javascript - 单击托盘图标时,电子(Windows)不显示菜单
- javascript - 单击其他按钮后按钮事件侦听器未执行
- python - 正则表达式:是否可以使用“|” 仅匹配模式的一部分?
- cobol - 如何在 COBOL 程序的 SYSOUT 假脱机中打印输出时纠正此逻辑错误?
- javascript - Javascript 数据结构 - 引导树视图节点