程序代码如下图所示:
横竖屏切换时候,FragmentTransaction commit 报错:java.lang.IllegalStateException: commit already called
根据上面的错误信息继续追踪
BackStackRecord.java类里面的 commitInternal 方法
从上面图片源码可以看到FragmentTransaction 调用的commit时最终是调用commitInternal 方法,在commitInternal 里如果mCommitted是true则抛出IllegalStateException(“commit already called”);大致意思是每一个实例化后的 FragmentTransaction 的事物只能被提交一次。
解决问题方法
在mTransaction调用add或者replace方法之前,重新实例化一下 mTransaction
mTransaction = getSupportFragmentManager().beginTransaction();//mTransaction 实例化
程序修改如上图所示,mTransaction可以正常commit了。
欢迎关注我的公众号,不定期推送优质的文章,
微信扫一扫下方二维码即可关注。