Recycleview notifyDataSetChanged()方法调用出现IllegalStateException 问题的解决

半腔热情 提交于 2020-04-07 07:32:45

关于Android Recycleview notifyDataSetChanged()方法调用出IllegalStateException 问题的解决。

最近写代码使用到了recyclerview,其中界面有一个Checkbox的点击,点击之后是需要刷新界面的相关数据的逻辑的,但是在刷新的时候报了状态异常,个人分析了一下原因:提示说Cannot call this method while RecyclerView is computing a layout or scrolling android.support.v7.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.Java:1462),RecyclerViewAdapter显然是用一个类似线程的东西写的,我们可以在里面看到很多父类线程的踪影,那么可以分析出出错的原因是因为RecyclerViewAdapter正在更新RecyclerView,也就是调用OnBindViewHolder的时候我们又来调用Notifydatasetchanged方法,这个方法也是刷新界面,最终肯定也是调用OnBindViewHolder,同时调用自然会抛出这个异常,当然,涉及到线程问题,那就肯定涉及到同步跟异步的问题。 
解决方法,使用handler类排队,等待recyclerview 更新结束之后再刷新。

备注:由于我并没有分析RecyclerView 以及这个View的Adapter,所以我不保证我的分析一定是对的,如果有错误,希望大家在评论中指出来,一起研究,但我通过这个分析毕竟解决了这个问题,不管原因对与不对,能解决问题就行。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!