在带有效负载的notifyItemChanged()之后,不带有效负载的onBindViewHolder()调用

时间:2019-06-18 16:10:40

标签: android android-recyclerview notifydatasetchanged

我有notifyDataSetChanged()后跟notifyItemChanged(0, Unit),其有效负载被称为同一适配器,其中包含3个项目。

每个呼叫都在view.post()内部进行。

我希望onBindViewHolder()被调用4次:notifyDataSetChanged()被调用3次,notifyItemChanged()被调用一次

实际上,它被调用了3次,所有载荷都为空。

但是,如果我将view.post()上的view.postDelayed({notifyItemChanged(0, Unit)}, 1000)替换掉,那么一切都会像个魅力。

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

1 个答案:

答案 0 :(得分:0)

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

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

在您的情况下,view.post导致runnable立即执行,这就是您面对此行为的原因,而在postDelayed的情况下,使用时间回收器视图需要花费一定的时间来回收或更新项目。 / p>