美文网首页
解决java.lang.IllegalStateExceptio

解决java.lang.IllegalStateExceptio

作者: 苏未_ | 来源:发表于2024-06-14 15:22 被阅读0次
一、报错场景:在实现黑夜模式切换过程中,出现了以下报错信息
error.jpg
二、报错原因:大概意思是,FragmentManager已经提交过事务了,重复提交会导致报错
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() 的时候,就会报上诉错误;
FragmentStateAdapter.png
五、解决方案:将代码中的子Fragment1中ViewPager2使用到的FragmentStateAdapter,传入的参数由FragmentActivity改为Fragment;

相关文章

网友评论

      本文标题:解决java.lang.IllegalStateExceptio

      本文链接:https://www.haomeiwen.com/subject/fykaqjtx.html