RecyclerView状态异常Cannot call this method while RecyclerView is computing a layout or scrolling
错误堆栈
java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.recyclerview.widget.RecyclerView.............layout:androidx.recyclerview.widget.GridLayoutManager@ca48e86, context:..........@a799d74at androidx.recyclerview.widget.RecyclerView.assertNotInLayoutOrScroll(RecyclerView.java:2880)at androidx.recyclerview.widget.RecyclerView$RecyclerViewDataObserver.onChanged(RecyclerView.java:5281)at androidx.recyclerview.widget.RecyclerView$AdapterDataObservable.notifyChanged(RecyclerView.java:11997)at androidx.recyclerview.widget.RecyclerView$Adapter.notifyDataSetChanged(RecyclerView.java:7070)
......
at android.os.Handler.handleCallback(Handler.java:938)at android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:240)at android.app.ActivityThread.main(ActivityThread.java:8000)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:603)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
报错代码
在RecyclerView中抛异常的地方
在RecyclerView进行数据更新的时候,会进行判断当前RecyclerView是否正在布局遍历或者滚动,如果是就抛出异常
isComputingLayout方法
这个方法用来判断RecyclerView当前是否在计算布局,这段注释的意思是:
返回RecyclerView当前是否正在计算布局。
如果此方法返回true,则意味着RecyclerView处于锁定状态
尝试更新适配器内容将导致异常,因为适配器内容
当RecyclerView尝试计算布局时,无法更改。
您的代码不太可能在这种状态下运行
当发生布局遍历或RecyclerView开始滚动时,由框架调用
响应系统事件(触摸、可访问性等)。
如果您有一些自定义逻辑来更改中的适配器内容,则可能会发生这种情况
对视图回调(例如焦点更改回调)的响应
布局计算。在这些情况下,您应该使用Handler或类似的机制。
返回true,如果RecyclerView当前正在计算布局,false否则
注释里面说,在这种情况下应该使用Handler来处理
mLayoutOrScrollCounter这个变量注释
意思是
在dispatchLayout和/或滚动期间,此变量递增。
在这些期间不应调用某些方法(例如适配器数据更改)。
这样做会导致很难找到bug,所以我们最好检查一下并抛出异常。
参见#assertInLayoutOrScroll(字符串)
参见#assertNotInLayoutOrScroll(字符串)
所以这个变量大于0就表示RecyclerView当前正在布局或滚动。
解决办法
综上所诉,当出现这个异常的时候,应当把数据更新的代码放在handler中。
new Handler(Looper.getMainLooper()).post(new Runnable() {@Overridepublic void run() {mAdapter.notifyDataSetChanged();}});
RecyclerView状态异常Cannot call this method while RecyclerView is computing a layout or scrolling相关推荐
- Android之提示Cannot call this method while RecyclerView is computing a layout or scrolling
1 问题 java.lang.IllegalStateException: Cannot call this method while RecyclerView is computing a layo ...
- Android Recycleview的 RecyclerView is computing a layout or scrolling解决方案
背景: 我们在做数据列表的时候,RecycleView 需要搭配RecycleView.Adapter来使用,当数据发生改变,我们可以通过adapter.notifyDataSetChanged()来 ...
- 采购订单的审批状态异常的处理,审批状态为:预审批或是处理中的单据
针对采购订单的审批状态异常的处理,审批状态为:预审批或是处理中的单据 可删除最后一次审批历史 select hr.name, poh.segment1, poh.org_id from po_head ...
- SQLServer镜像状态异常排查
title: SQLServer · CASE分析 · 镜像状态异常排查 author: 天铭 问题 用户实例的某个DB一直处于Synchronizing无法达到SYNCHRONIZED状态,用了很多 ...
- soul显示服务器异常,soul账号状态异常是什么意思?soul账号异常操作多久解封
soul是一款很受欢迎的灵魂社交app,用户在soul可以结交志趣相投的朋友,还可以发广场动态,不过有的朋友可能会因为一些原因导致账号异常,那么soul账号状态异常是什么情况呢?soul异常操作行为暂 ...
- soul服务器不稳定,soul聊天状态异常 消息发送失败
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. soul聊天状态异常,消息发送失败的原因及解决方法如下: 1.发不出消息(显示红色感叹号),一般是由于网络不稳定,建议更换网络或者 ...
- soul显示服务器异常,soul聊天状态异常 消息发送失败
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. soul聊天状态异常,消息发送失败的原因及解决方法如下: 1.发不出消息(显示红色感叹号),一般是由于网络不稳定,建议更换网络或者 ...
- 咕咕机显示服务器请求异常,咕咕机云服务器状态异常
咕咕机云服务器状态异常 内容精选 换一换 如果对弹性云服务器执行重启/关机操作,弹性云服务器长时间(大于30分钟)处于"正在重启"/"正在关机"状态时,建议执行 ...
- DNS知识点及服务搭建案例和解析状态异常
概念 DNS (Domain Name System)域名解析服务器 linux 常用软件 BIND:另译 Berkeley Internet Name Domain 作用: 通过将主机名(FQDN ...
最新文章
- 损失函数的可视化:浅论模型的参数空间与正则
- poj2186(强连通分量分解)
- 1.6 课程资源-深度学习-Stanford吴恩达教授
- 思科查看服务器启动配置文件,启动配置检查UCS
- JavaScript内存管理
- 过滤 php 网址,php过滤html中的其他网站链接的方法(域名白名单功能)
- Android 系统(199)---Android事件分发机制详解
- BZOJ1018 堵塞的交通(线段树)
- font-spider(字蛛) 让页面引入中文web字体
- javaweb 锐浪报表导出文件,并上传服务器解决方案
- CSS三大特性(层叠/继承/优先)
- UWA DAY 2021 精彩盘点 | 35场技术议题掀起的思维浪潮
- 木讷的程序员需要知道的事情 (六)
- 修复计算机系统还原,怎么给电脑系统做一键恢复
- 松原计算机等级考试试题,2019年上半年吉林省松原市计算机等级考试注意事项...
- mysql把表里是时间加8小时_mysql经典的8小时问题-wait_timeout
- matlab针对电阻和电源电动势为r1,第三章 电力电子与MATLAB应用技术
- python pty模块 - 作用1 - 虚拟一个串口
- 李乐园:iMetaLab Suite宏蛋白质组学数据分析与可视化(视频+PPT)
- Shortest Path(翻译)