Activity中切换Fragment的一些问题

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的区别

你可能感兴趣的:(Activity中切换Fragment的一些问题)