ViewPager加载fragment出现Wrong state class错误的问题

网友投稿 1690 2022-10-04

ViewPager加载fragment出现Wrong state class错误的问题

ViewPager加载fragment出现Wrong state class错误的问题

​​编者:李国帅​​

​​时间:2020/8/2  ​​

背景:

有时还会有一些附带的效果,比如tab字体颜色变化,选中内容居中等。自己实现也不复杂,但是也没必要重复制造轮子,也没有人家专业。我就采用了CommonNavigator+ViewPager+Fragment的方法。

问题描述:

应用中遇到了这么个问题,

W/System.err: java.lang.IllegalArgumentException: Wrong state class,

expecting View State but received class android.support.v7.widget.RecyclerView$SavedState instead.

This usually happens when two views of different type have the same id in the same hierarchy.

This view's id is id/xxxxxx. Make sure other views do not use the same id.。

因为在Fragment中使用databinding技术,我也朝这方面想,把界面中使用了其他组件简化清理,进行测试,确实出现了同样的问题。

过程:

开始的时候,在layout inspector中查看,所有的fragment都是在viewpager容器中,再加到同一个layout布局,有点类似listview中的item,这应该不构成问题。

有人说设置mViewPager.setOffscreenPageLimit(3),测试发现设置多少都没用。

又说重载ViewPager的onRestoreInstanceState,可以避免错误,但是根本就没有看见调用。

网上的那些说,不能说有问题,可能是不适合自己遇到的情况。

后来,看到有人说要使用懒加载,于是,我在fragment中添加重载函数public void setUserVisibleHint(boolean isVisibleToUser),等待该Fragment的UI 用户是否可见了之后再操作数据

事实证明确实如此。

总结:

这个问题和viewpager的使用有关。

和fragment是否使用databinding没啥关系,重要的是,必须等待fragment切换完成之后再操作里面的控件。可能和使用viewpager加载的多个fragment中使用相同的resourceid有些关系。

随着程序的变量里面会有很多东西,出现问题各个都会成为怀疑对象。真相是实验出来的,不是猜出来的,坚持实事求是才能找到问题的答案。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:小程序中点赞和收藏功能的实现代码(微信留言点赞生成器小程序)
下一篇:微信小程序中选项卡的实现方法(微信一用小程序就卡)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~