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()
问题: 问题是在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)
| 归档时间: |
|
| 查看次数: |
3658 次 |
| 最近记录: |