在使用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 {
}
}
}