1、有问题的代码:
class LeftFrag extends Fragment{
private FragmentManager manager;
private FragmentTransaction transaction;
A(){
manager = getFragmentManager();
transaction = manager.beginTransaction();
}
void Fun(){
RightFrag rightFrag = new RightFrag();
transaction.replace(R.id.right, rightFrag, "rightfrag");
transaction.commit();
}
}
上面的写法就会报错:java.lang.IllegalStateException: commit already called。如果在你一个类中已经使用一个成员变量transaction去调用了一次commit()方法,那么在其它外部类中就不能再使用一个成员变量transaction再次调用commit()方法。我当时出错是因为在Activity中加载了LeftFrag并在Activity中commit了一次。
2、解决办法
class LeftFrag extends Fragment{
A(){
manager = getFragmentManager();
transaction = manager.beginTransaction();
}
//解决办法也就是把manager和transaction定义为函数内部的局部变量
void Fun(){
private FragmentManager manager =getFragmentManager();
private FragmentTransaction transaction =manager.beginTransaction();
RightFrag rightFrag = new RightFrag();
transaction.replace(R.id.right, rightFrag, "rightfrag");
transaction.commit();
}
}