根据docs https://developer.android.com/reference/android/app/FragmentManager.html
片段事务只能在事务之前创建/提交
保存其状态的活动。如果您尝试在之后提交交易
Activity.onSaveInstanceState() (以及在以下之前
Activity.onStart或Activity.onResume(),你会得到一个错误。
我可以理解,片段事务在 Activity.onSaveInstanceState() 之后无法提交的第一部分,
因为如果需要恢复活动,提交后的状态可能会丢失。
但我不明白为什么我们不能在 Activity.onStart 或 Activity.onResume() 之前提交片段事务? Oncreate() 也先于 Activity.onStart 或 Activity.onResume()。这是否意味着我们甚至不能在 oncreate() 中提交它?
这里的关键是你不能在调用后提交事务onSaveInstanceState()
并在以下之前 onStart()
or onResume()
.
您可以在初始时很好地提交交易onCreate()
以及随后的onStart()
or onResume()
因为没有国家。
但是,如果活动正在恢复其状态(即onSaveInstanceState()
先前被调用,并且 Activity 正在以该状态重新创建自身,因此您无法执行 Fragment 事务。这是因为,如果您在 Activity 恢复之前的 Fragment 状态之前提交 Fragment 事务,您最终会陷入不清楚自己处于什么状态的情况。保存的状态是否优先于您创建的新状态提交 Fragment 事务,还是新事务应该优先于已保存的状态?
检查这种情况的最简单方法是检查是否savedInstanceState
捆绑传递到onCreate()
其他生命周期方法为空。如果它为空,则没有保存的状态,您可以安全地执行交易。如果它不为空,那么您可能想要保留已保存的状态。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)