解决java.lang.IllegalStateExceptio
2024-06-14 本文已影响0人
苏未_
一、报错场景:在实现黑夜模式切换过程中,出现了以下报错信息
![](https://img.haomeiwen.com/i4237968/d1440485b9dac420.jpg)
二、报错原因:大概意思是,FragmentManager已经提交过事务了,重复提交会导致报错
![](https://img.haomeiwen.com/i4237968/d26436a6babdc701.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)