2019独角兽企业重金招聘Python工程师标准>>>

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

转载于:https://my.oschina.net/u/2971691/blog/783636

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

  1. android notifydatasetchanged 刷新错误,Android 调用notifyDataSetChanged方法失败解决办法

    Android 调用notifyDataSetChanged方法失败解决办法 如果使用ListView.GridView等进行数据展示,当绑定的数据有了更新的时候,需要实时刷新ListView,即调用 ...

  2. 解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效问题(从notifyDataSetChanged方法的源码入手,超详细)

    从PagerAdapter的notifyDataSetChanged方法源码入手解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效的解决办法 1:问题描 ...

  3. Android源码与设计模式之notifyDataSetChanged()方法与观察者模式

    BaseAdapter在调用notifyDataSetChanged()方法后,GridView就刷新了,下面从源码角度对此原理进行剖析. 首先进到BaseAdapter中查看其notifyDataS ...

  4. Spring的refresh()方法调用过程

    Spring的refresh()方法调用过程 refresh()是Spring中比较核心的方法,Spring所有的初始化都在这个方法中完成 具体代码如下 public void refresh() t ...

  5. 使用JavaSymbolSolver解决Java代码中的方法调用

    为什么创建java-symbol-solver? 几年前,我开始使用JavaParser ,然后开始做出贡献. 不久之后,我意识到我们想对Java代码执行的许多操作不能仅通过使用解析器生成的抽象语法树 ...

  6. atitit.架构设计---方法调用结果使用异常还是返回值

    atitit.架构设计---方法调用结果使用异常还是返回值 1. 应该返回BOOL类型还是异常 1 2. 最终会有四种状况,抛出异常.返回特殊值.阻塞.超时 1 3. 异常的优缺点点 1 4. jav ...

  7. BaseAdapter的notifyDataSetChanged方法

    都用过 BaseAdapter的notifyDataSetChanged()方法,用法很简单,当BaseAdapter的数据更新了,需要更改显示,这时候就要调用notifyDataSetChanged ...

  8. notifyDataSetChanged()方法怎么使用安卓

    notifyDataSetChanged() 方法用于通知数据集改变.它可以用于在数据集更新之后,刷新列表视图的显示. 使用方法如下: 在您需要更新列表视图的地方,获取列表视图的适配器. 调用适配器的 ...

  9. Android中关于notifyDataSetChanged()方法的注意

    1.首先介绍下notifyDataSetChanged()方法的原理 notifyDataSetChanged方法原理 2.介绍下我在此处犯的错误 public class HomeFragment ...

  10. notifyDataSetChanged方法

    对于Android开发来说处理一些界面需要和Adapter适配器打交道,虽然Android自带了一些比如ArrayAdapter但是大多数情况下无法满足我们需要,所以就要从BaseAdapter派生一 ...

最新文章

  1. 03 在百度地图上定位到指定位置
  2. SAP不同的产品是如何支持用户创建自定义字段的
  3. 选择查询 mysql_具体的mysql选择查询
  4. No MyBatis mapper was found in ‘[xx.mapper]‘ package. Please check your configuration
  5. 一个java源文件允许_一个Java源文件中最多只能有一个class定义
  6. 二分法——leetcode35. 搜索插入位置
  7. 第八节:Task的各类TaskTResult返回值以及通用线程的异常处理方案
  8. ACM PKU 2559 Largest Rectangle in a Histogram http://acm.pku.edu.cn/JudgeOnline/problem?id=2559
  9. NameError: name ‘time‘ is not defined
  10. c 远程登陆linux,Linux C/C++基础——Windows远程登录Linux
  11. 万字长文讲述我是怎样保送清华的 | 寒门学子奋斗史(四)
  12. crontab 问号_轻松搞定crontab和quartz表达式
  13. 【强连通分量】 Kosaraju和Tarjan算法 (标准模板+详细注释)
  14. 51单片机——LED点阵
  15. 浅谈微信小程序和微信公众平台
  16. 解决 Mounty显示问题:the volume my passport is not mounted currently at the specified path Please remove
  17. 快速编程的捷径——计算机达人成长之路(40)
  18. 在B站被催更的恰饭视频是什么样的?
  19. 2020 IEEE 冯诺依曼奖得主:Michael Jordan --机器学习领域泰斗级人物
  20. 生成html水印,兼容ie8,ie兼容性问题与解决办法,移动端水印给出的建议

热门文章

  1. 《深度学习》花书训练营day01-线性代数
  2. Levenberg-Marquardt算法简介和C++实现
  3. 黑暗森林:知识图谱的前世今生
  4. ENVI入门系列教程---一、数据预处理---2.2 编辑图像头文件
  5. ArcGIS 地表TIN面数据的符号化
  6. PHP实现折半查询算法
  7. 使用Pycharm管理Python依赖库(不使用anaconda)
  8. ORACLE利用scn赚钱,在Oracle中增进SCN及案例介绍
  9. websocket动态添加广播路径_数据可视化WebSocket实现聊聊我的实现思路
  10. 一个请求里能有多个cookie吗_从一个男人对女人家人的态度里,能看出他有多爱对方吗?...