如何利用小游戏开发框架提升企业小程序的用户体验与运营效率
1690
2022-10-04
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~