首页 > 解决方案 > 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),一切都会像魅力一样起作用。

你能解释一下,为什么会这样?

标签: androidandroid-recyclerviewnotifydatasetchanged

解决方案


正如谷歌文档中记录的那样:

Post:post 导致 Runnable 被添加到消息队列中。PostDelayed :使 Runnable 被添加到消息队列中,在指定的时间过去后运行。

在您的情况下, view.post 导致 runnable 立即执行,这就是您面临这种行为的原因,而在 postDelayed 的情况下,使用时间回收器视图需要足够的时间来相应地回收或更新项目。


推荐阅读