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

Zam*_*ron 8 android android-fragments android-3.0-honeycomb fragmenttransaction

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

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

警告:只有在活动保存其状态(用户离开活动时)之前,才能使用commit()提交事务.如果在该点之后尝试提交,则将引发异常.这是因为如果需要恢复活动,则提交后的状态可能会丢失.对于可以丢失提交的情况,请使用commitAllowingStateLoss().

问题是,在返回父活动之后,我再也不能使用FragmentTransactions,它是我在应用程序中设计导航的方式不可或缺的.

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

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

ant*_*nyt 3

当您的父活动恢复/启动时,您可以再次提交片段事务,即使它之前已暂停。该文档仅意味着您无法在活动暂停(并且状态已保存)期间以及再次恢复之前进行提交。如果您在访问另一个 Activity 后返回到父 Activity,则可以在Activity.onStart()调用后再次使用 Fragment 事务。

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