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

use*_*737 4 android android-fragments fragmentmanager

java.lang.IllegalStateException: FragmentManager is already executing transactions
Run Code Online (Sandbox Code Playgroud)

我已经阅读了有关它的所有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();
    }
}
Run Code Online (Sandbox Code Playgroud)

它是commit()/ commitAllowingStateLoss()导致IllegalStateException:FragmentManager已经在执行事务.不是commitNow()或executePendingTransactions()

use*_*737 8

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

override fun onResume() {
    super.onResume()

    if(condition) replaceFragment()
}
Run Code Online (Sandbox Code Playgroud)

override fun onResume() {
    super.onResume()

    if(condition) {
        Observable.fromCallable{}
                  .observeOn(AndroidSchedulers.mainThread())
                  .subscribe { replaceFragment() }
}
Run Code Online (Sandbox Code Playgroud)

或使用Handler推迟执行replaceFragment()

 new Handler().post { replaceFragment() };
Run Code Online (Sandbox Code Playgroud)