【问题标题】:onBindViewHolder() called without payload after notifyItemChanged() with payloadonBindViewHolder() 在 notifyItemChanged() 后调用而没有负载
【发布时间】:2019-06-18 16:10:40
【问题描述】:

我有 notifyDataSetChanged() 后跟 notifyItemChanged(0, Unit) 的有效负载调用相同的适配器,例如包含 3 个项目。

每个调用都是在view.post() 内部进行的。

我预计onBindViewHolder() 将被调用 4 次:notifyDataSetChanged() 调用 3 次,notifyItemChanged() 调用 1 次

实际上它被调用了 3 次,所有的负载都是空的。

但是,如果我将 view.post() 替换为 view.postDelayed({notifyItemChanged(0, Unit)}, 1000),一切都会像魅力一样发挥作用。

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

【问题讨论】:

    标签: android android-recyclerview notifydatasetchanged


    【解决方案1】:

    正如 Google 文档中所记录的那样:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多