FragmentTransaction commit 报错:java.lang.IllegalStateException: commit already called

程序代码如下图所示:

FragmentTransaction commit 报错:java.lang.IllegalStateException: commit already called_第1张图片
横竖屏切换时候,FragmentTransaction commit 报错:java.lang.IllegalStateException: commit already called
错误信息
根据上面的错误信息继续追踪
BackStackRecord.java类里面的 commitInternal 方法

FragmentTransaction commit 报错:java.lang.IllegalStateException: commit already called_第2张图片
从上面图片源码可以看到FragmentTransaction 调用的commit时最终是调用commitInternal 方法,在commitInternal 里如果mCommitted是true则抛出IllegalStateException(“commit already called”);大致意思是每一个实例化后的 FragmentTransaction 的事物只能被提交一次。

解决问题方法

在mTransaction调用add或者replace方法之前,重新实例化一下 mTransaction

 mTransaction = getSupportFragmentManager().beginTransaction();//mTransaction 实例化

FragmentTransaction commit 报错:java.lang.IllegalStateException: commit already called_第3张图片
程序修改如上图所示,mTransaction可以正常commit了。

你可能感兴趣的:(#,Android知识点,android)