onActivityResult()
回调中提交FragmentTransaction
时遇到了问题。在网上搜索时,我发现这个问题和答案,其中说:
在调用
onActivityResult()
时,活动/片段的状态可能尚未恢复,因此在此期间发生的任何事务都将丢失。
我最终改编了同一答案中推荐的解决方案,并且一切顺利。然而,最近的实验表明,也许情况已经改变,现在可能安全地从onActivityResult()
中提交FragmentTransaction
。
(支持v4)FragmentManager.beginTransaction()
的文档将事务的安全窗口定义为:
注意:片段事务只能在活动保存其状态之前创建/提交。如果您尝试在
FragmentActivity.onSaveInstanceState()
之后(并在以下FragmentActivity.onStart
或FragmentActivity.onResume()
之前)提交事务,则会收到错误消息。
阅读onActivityResult()
的文档,我看到:
onResume()
之前立即收到此调用。这让我相信在onActivityResult()
中执行这些事务应该是安全的,因为onStart()
已经被调用,将我放在安全窗口内。我制作了一个应用程序来测试这个问题,并且我成功地看到了我在onActivityResult()
内创建和提交的对话框片段。我还记录了活动生命周期回调,以便检查它们的顺序,我每次都会看到onStart()
,然后是onRestoreInstanceState()
,最后是onActivityResult()
。我是否遗漏了什么?或者框架是否发生了变化,onActivityResult()
现在可以保证是片段事务的安全位置?这种行为是否因API级别而异?我找到了另一个问题和答案,似乎读取了与我一样的文档,但两者都超过一年了,也没有特别提到onActivityResult()
作为处理事务的安全位置。