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

编者:李国帅

qq:9611153 微信lgs9611153

时间:2020/8/2 

背景:

tab导航栏是常见的应用技术,通过点击导航栏或者手势滑动切换显示不同的fragment。

有时还会有一些附带的效果,比如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有些关系。

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微澜-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值