gpt4 book ai didi

android - 当父activity的状态必须保存时,你如何处理 fragment 事务?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:53 25 4
gpt4 key购买 nike

我的应用有多个 fragment 和 Activity 。在主父 Activity 的生命周期中,应用程序会在其他 Activity 中向用户显示信息/选项。

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

Caution: You can commit a transaction using commit() only prior to the activity saving its state (when the user leaves the activity). If you attempt to commit after that point, an exception will be thrown. This is because the state after the commit can be lost if the activity needs to be restored. For situations in which its okay that you lose the commit, use commitAllowingStateLoss().

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

我想到的一个解决方案是将我的 Activity 更改为 fragment ,但是我的应用最终也会使用应用内结算,我相信它总是会启动自己的 Activity 。这似乎是一个巨大的限制 - 在开发的某个时刻,我最终将不得不显示一个单独的 Activity 。

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

最佳答案

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

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

关于android - 当父activity的状态必须保存时,你如何处理 fragment 事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7998507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com