gpt4 book ai didi

android - onViewCreated - 替换 fragment 的错误位置?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:09:40 26 4
gpt4 key购买 nike

如果用户没有数据,我将显示一个空 fragment 。在那个 emptyFragment(在 onViewCreated)中,我检查一个条件,有时想用另一个替换那个空的 Fragment,所以我在相应的 Activity 上调用一个方法来替换该 fragment 。

一些用户(目前只有三星,6.0.1,但我不知道这是否意味着什么)在我 executePendingTransactions 的行上遇到崩溃:

IllegalStateException:

Fatal Exception: java.lang.RuntimeException
Unable to resume activity
{....app.activities.MyActivity_}:
java.lang.IllegalStateException: FragmentManager is already executing transactions

这是 6.0.1 中的错误还是 onViewCreated 执行此操作的错误位置?

编辑

这是一个可能的解决方案吗?

    if (addToBackStack) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentFragment, name).addToBackStack(name).commitAllowingStateLoss();
getSupportFragmentManager().executePendingTransactions();
} else {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentFragment, name).commitNow();
}

最佳答案

首先:为什么不在 Activity 中移动“检查条件”?通过这种方式,您可以决定您需要的 Fragment 是什么:管理空值的 Fragment 还是另一个。

其次:我建议阅读两个关于 fragment 的小教程commitstate loss .您可以在那里找到许多与 fragment 相关的错误情况。

最后是与“FragmentManager 已经在执行事务”相关的答案:至少有两个对 executePendingTransactions() 方法的嵌套调用,这意味着您正在请求 fragment 管理器(每个 Activity 有一个 fragment 管理器实例)在执行另一个事务时执行一个事务。很难确定问题出在哪里,您应该发布 Activity 的所有代码和所有涉及的 fragment ,只是为了识别和删除对 executePendingTransactions 的一个(第一个)调用,但我可以给您一些提示:

  1. 不要使用executePendingTransactions()。很难维护需要在 fragment 之间进行某种编排的代码
  2. 如果您不需要立即访问要添加到 Activity 的 fragment ,请使用 commit()。简单提交将在主线程空闲时立即执行所有事务。
  3. 如果您需要立即访问 fragment ,请使用commitNow()。老实说,我只用过几次这种方法,主要是为了正确处理 DialogFragments。
如果您使用 support library

commitNow() 可用于 24 之前的设备,我建议您采用。

关于android - onViewCreated - 替换 fragment 的错误位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40572148/

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