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()
答案 0 :(得分:6)
<强>问题:强> 问题是在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() };