关于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,所以我不保证我的分析一定是对的,如果有错误,希望大家在评论中指出来,一起研究,但我通过这个分析毕竟解决了这个问题,不管原因对与不对,能解决问题就行。
来源:oschina
链接:https://my.oschina.net/u/2971691/blog/783636