java.lang.IllegalStateException: commit already called
添加Fragment时,报如下错误:java.lang.IllegalStateException: commit already called
原因是同一个FragmentTransaction只能使用commit方法提交一次。我们可以在它的实现类 BackStackRecord中找到以下代码,每一个BackStackRecord对象都会维护一个布尔变量,即mCommitted变量,当commit后赋值这个变量为true,下次再commit时会检查这个变量,如果是true,则抛出以上异常。
commit方法的源码如下:
@Override
public int commit() {
return commitInternal(false);
}
int commitInternal(boolean allowStateLoss) {
if (mCommitted) throw new IllegalStateException("commit already called");
if (FragmentManagerImpl.DEBUG) {
Log.v(TAG, "Commit: " + this);
LogWriter logw = new LogWriter(TAG);
PrintWriter pw = new PrintWriter(logw);
dump(" ", null, pw, null);
}
mCommitted = true;
if (mAddToBackStack) {
mIndex = mManager.allocBackStackIndex(this);
} else {
mIndex = -1;
}
mManager.enqueueAction(this, allowStateLoss);
return mIndex;
}
所以,我们在使用FragmentTransaction时,需要保证这个对象只调用一次commit,下次commit时需要重新获取!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。