解决java.lang.IllegalStateExceptio
作者:
苏未_ | 来源:发表于
2024-06-14 15:22 被阅读0次一、报错场景:在实现黑夜模式切换过程中,出现了以下报错信息
![](https://img.haomeiwen.com/i4237968/d1440485b9dac420.jpg)
error.jpg
二、报错原因:大概意思是,FragmentManager已经提交过事务了,重复提交会导致报错
![](https://img.haomeiwen.com/i4237968/d26436a6babdc701.png)
image.png
三、原因浅析:在Androidx中,黑夜模式切换,会使Activity主动调用了applyDayNightToActiveDelegates()方法,使Activity重建,然后因为项目是使用MainActivity+Fragment再嵌套Fragment1+ViewPager2的结构,第一层MainActivity中使用到了FragmentManager对Tab进行切换,嵌套的Fragment1中使用了ViewPager2,同样也用到了FragmentManager,可以从此处开始查找问题;
四、原因查找:通过对项目代码的review,发现了子Fragment1嵌套的ViewPager2中,使用的是FragmentStateAdapter,从下图的构造方法可知,传参形式可以是Fragment或者FragmentActivity,但是代码中使用的传参却是FragmentActivity,这样的话相当于使用到了MainActivity中的supportFragmentManager,从而导致MainActivity重建和子Fragment1重建时,子Fragment1中的ViewPager2重新设置setAdapter() 的时候,就会报上诉错误;
![](https://img.haomeiwen.com/i4237968/4b3f431b08b68b5b.png)
FragmentStateAdapter.png
五、解决方案:将代码中的子Fragment1中ViewPager2使用到的FragmentStateAdapter,传入的参数由FragmentActivity改为Fragment;
本文标题:解决java.lang.IllegalStateExceptio
本文链接:https://www.haomeiwen.com/subject/fykaqjtx.html
网友评论