java.lang.IllegalStateException: commit already called
如果你在一个类中使用全局变量的FragmentTransaction对象去commit,那么就会报这个错误。
解决方法是将FragmentTransaction对象变成一个方法里的变量。
错误代码:
FragmentManager fm =...;
FragmentTransaction ft=...;
private void changeFragment(Fragment fromFragment, Fragment toFragment) {
...
ft.commitAllowingStateLoss(); //# commit()同样思路解决
getSupportFragmentManager().executePendingTransactions();
}
修改为以下代码
private void changeFragment(Fragment fromFragment, Fragment toFragment) {
FragmentManager fm =...;
FragmentTransaction ft=...;
...
ft.commitAllowingStateLoss(); //# commit()同样思路解决
getSupportFragmentManager().executePendingTransactions();
}
java.lang.IllegalStateException: Fragment already added
在Activity中使用RadioGroup控制切换fragment的时候,点击过快或者多指同时点击屏幕的话,很有可能会出现这个问题,判断fragment也没什么用。暂时还不知道原因,就是fm.findFragmentByTag(toFragment.getClass().getName())获取fragment的时候为空数据,但是这个数据肯定是已经存到FragmentTransaction 里边了,因为这个问题就导致了无法判断fragment是否添加到fm里边了。
因为commit执行的是一个延时的异步操作,所以我们在commit后边加上getSupportFragmentManager().executePendingTransactions();立即执行提交的延时操作就好了。
关于 java.lang.IllegalStateException: Fragment already added 解决方式
FragmentTransaction的commit和commitAllowingStateLoss的区别