android - onBindViewHolder() 在 notifyItemChanged() 后调用而没有负载
问题描述
我notifyDataSetChanged()
紧随其后的是notifyItemChanged(0, Unit)
为同一个适配器调用的有效负载,例如包含 3 个项目。
每个调用都是在内部进行的view.post()
。
我预计onBindViewHolder()
会被调用 4 次:3 次 fornotifyDataSetChanged()
和 1 次 fornotifyItemChanged()
实际上它被调用了 3 次,都是空的有效载荷。
但是,如果我替换view.post()
on view.postDelayed({notifyItemChanged(0, Unit)}, 1000)
,一切都会像魅力一样起作用。
你能解释一下,为什么会这样?
解决方案
正如谷歌文档中记录的那样:
Post:post 导致 Runnable 被添加到消息队列中。PostDelayed :使 Runnable 被添加到消息队列中,在指定的时间过去后运行。
在您的情况下, view.post 导致 runnable 立即执行,这就是您面临这种行为的原因,而在 postDelayed 的情况下,使用时间回收器视图需要足够的时间来相应地回收或更新项目。
推荐阅读
- windows - 检测进程是否正在调试;在核心地带
- encryption - 将数据安全地存储在内存中(基于密码的加密)
- mysql - Mysql - 使用唯一索引防止组合列的重复条目
- flutter - 导航到其他屏幕从应用栏中删除后退按钮
- python - 如何使用特殊字符作为字符串的“对象”类型变量?
- ionic-framework - 为什么 ionic 4 社交分享插件在浏览器中不起作用?
- azure - Terraform 将不同环境部署到不同 Azure 订阅的最佳实践
- sql - 加入两个表会给出重复的结果
- c# - 如何不在开源项目的 Visual Studio/C# 代码中存储 API 密钥
- ios - 滑块减速并且移动不顺畅