FragmentManager уже выполняет транзакции на commitAllowingStateLoss ()

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 уже выполняет транзакции. НЕ commitNow () или executePendingTransactions ()


person user1269737    schedule 28.03.2018    source источник


Ответы (1)


ПРОБЛЕМА: проблема заключалась в том, что при синхронном выполнении replaceFragment () в методе Fragment.onResume ().

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() };
person user1269737    schedule 28.03.2018