当父活动的状态将被保存时,您如何处理片段事务?

8
我的应用有几个片段和活动。在主父活动的生命周期内,应用会在其他活动中向用户呈现信息/选项。
关于片段的文档对commit()有以下规定:
警告:只能在活动保存其状态之前(当用户离开活动时)使用commit()提交事务。如果您尝试在此之后提交,将引发异常。这是因为提交后的状态可能会丢失,如果需要恢复活动,则会出现问题。对于可以允许丢失提交的情况,请使用commitAllowingStateLoss()。
问题在于返回到父活动后,我无法再使用FragmentTransactions,而这对我设计的应用程序导航方式至关重要。
我想到的一个解决方案是将我的活动更改为片段,但是我相信我的应用最终也将使用应用内计费,它将始终启动自己的活动。这似乎是一个巨大的限制-在开发的某个阶段,我最终将不得不显示单独的活动。
我可能可以使用commitAllowingStateLoss()来摆脱困境,但我觉得我在Android平板应用程序开发中缺少了一个重要概念。有没有一种方法可以启动活动,然后返回到管理片段的父活动,而不会失去提交FragmentTransactions的能力?

1
阅读这篇博客文章可能会有所帮助。 - Alex Lockwood
1个回答

3
当您的父活动恢复/启动时,即使它之前已经暂停,您也可以再次提交片段事务。文档仅意味着您不能在活动暂停(并保存了状态)之后,在其再次恢复之前提交。如果您在访问其他活动后返回父活动,则可以在调用Activity.onStart()之后再次使用片段事务。
此限制的原因是Android在Activity.onSaveInstanceState()期间保存与Activity相关联的片段的状态。如果您尝试在此时之后进行片段事务,则在Android需要重新创建+恢复该Activity时,您将面临状态丢失(因为它用于重新创建Activity状态的信息仅是在Activity.onSaveInstanceState()中捕获的数据)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接