8

我的应用程序有几个片段和活动。在主要父活动的生命周期中,应用程序在其他活动中向用户提供信息/选项。

Fragments 的文档对 commit() 有以下规定:

注意:您只能在活动保存其状态之前(当用户离开活动时)使用 commit() 提交事务。如果您在该点之后尝试提交,则会引发异常。这是因为如果需要恢复活动,提交后的状态可能会丢失。对于丢失提交没关系的情况,请使用 commitAllowingStateLoss()。

问题是在返回父活动后,我不能再使用 FragmentTransactions,这是我在应用程序中设计导航方式不可或缺的一部分。

我想到的一种解决方案是将我的活动更改为片段,但是我的应用程序最终也将使用应用内计费,我相信这将始终启动自己的活动。这似乎是一个巨大的限制——在开发的某个阶段,我最终将不得不显示一个单独的活动。

我可能会使用 commitAllowingStateLoss() 侥幸逃脱,但我觉得我错过了 Android 平板电脑应用程序开发中的一个主要概念。有没有办法在不失去提交 FragmentTransactions 的能力的情况下启动活动然后返回父活动(管理片段)?

4

1 回答 1

3

当您的父活动恢复/开始时,您可以再次提交片段事务,即使它之前已暂停。文档仅意味着您不能在活动暂停(并且状态已保存)期间和再次恢复之前提交。如果您在访问另一个活动后返回到您的父活动,您可以在Activity.onStart()被调用后再次自由使用片段事务。

这个限制的原因是 Android 在Activity.onSaveInstanceState(). 如果您在此之后尝试进行片段事务,那么如果 Android 需要重新创建 + 恢复该 Activity,您将面临状态丢失(因为它用于重新创建 Activity 状态的信息只是在 中捕获的数据Activity.onSaveInstanceState())。

于 2013-05-13T11:50:38.100 回答