android - FragmentManager 已经在 commitAllowingStateLoss() 上执行事务

标签 android android-fragments fragmentmanager

java.lang.IllegalStateException: FragmentManager is already executing transactions

我已经阅读了所有关于 StackOverflow 的问题,但没有任何帮助。 只是想分享我的经验

public void onResume() {
    super.onResume()

    if(condition) replaceFragment()
}

public void replaceFragment() {
    if (fragmentName != null && !this.isDestroyed()) {
        final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

        ft.replace(container_id, FragmentInstantiate());
        ft.commitAllowingStateLoss();
    }
}

是 commit()/commitAllowingStateLoss() 导致了 IllegalStateException: FragmentManager already executing transactions。不是 commitNow() 或 executePendingTransactions()

最佳答案

问题: 问题是在 Fragment.onResume() 方法中 同步 执行 replaceFragment()。

override fun onResume() {
    super.onResume()

    if(condition) replaceFragment()
}

解决方案

override fun onResume() {
    super.onResume()

    if(condition) {
        Observable.fromCallable{}
                  .observeOn(AndroidSchedulers.mainThread())
                  .subscribe { replaceFragment() }
}

或者使用Handler延迟replaceFragment()的执行

 new Handler().post { replaceFragment() };

关于android - FragmentManager 已经在 commitAllowingStateLoss() 上执行事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49529529/

相关文章:

android - fragment ViewPager NullPointer 问题

android - 如何从一个 fragment 切换到另一个 fragment android

android - 停止在恢复后重新创建 fragment ?

android - 删除 OLDEST 提交的返回堆栈 fragment

javascript - ngCamera 不适用于 iOS

android - 使用arrayadapter向 ListView 动态添加项目

java - 重新打开应用程序时获取 AsyncTask 状态

Android如何在 fragment 中显示DatePicker?

java - Android Room - 处理对象中的对象列表和查询结果

android - gradle 版本不兼容 (android studio 2.1 preview 1) <title editable>