Fragment commit already called的错误

在使用fragment时,当需要使用事务transaction来动态切换时,每一个commit都需要使用局部临时变量,不能使用全局变量,否则会报告commit already called的错误。例如:

 if (fragment.getTag().equals(TAG_FRAGMENT_ONE)) {
 //每次使用时都使用局部变量FragmentManager 和FragmentTransaction 来commit
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.activity_fragment_demo, new FragmentTwo(), TAG_FRAGMENT_TWO);
        ft.addToBackStack(null);
        ft.commit();
    } else {
        if (fragment.getTag().equals(TAG_FRAGMENT_TWO)) {
        //每次使用时都使用局部变量FragmentManager 和FragmentTransaction 来commit
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.hide(fragment);
            ft.add(R.id.activity_fragment_demo, new FragmentThree(), TAG_FRAGMENT_THREE);
            ft.addToBackStack(null);
            ft.commit();
        } else {
            if (fragment.getTag().equals(TAG_FRAGMENT_THREE)) {
                LoginDialogFragment dialog = new LoginDialogFragment();
                dialog.show(getSupportFragmentManager(), "login");
            } else {

            }
        }
    }

猜你喜欢

转载自blog.csdn.net/whurs/article/details/53611253
今日推荐