为什么 RecyclerView' onBindViewHolder 中的有效负载是一个列表?

2022-09-04 04:04:41
 public void onBindViewHolder(VH holder, int position, List<Object> payloads) {
        onBindViewHolder(holder, position);
 }

我知道当我们想更新一些视图不是全部在回收站视图项目,我可以使用

public final void notifyItemChanged(int position, Object payload) {
        mObservable.notifyItemRangeChanged(position, 1, payload);
}

正如该代码所看到的,参数是一个对象,但是为什么在适配器中它更改为列表,并且我必须使用它来查找我的有效负载?list.get(0)

谢谢


答案 1

来自安卓文档:

部分绑定与完全绑定:

payloads 参数是来自 notifyItemChanged(int, Object) 或 notifyItemRangeChanged(int, int, Object) 的合并列表。如果有效负载列表不为空,则 ViewHolder 当前绑定到旧数据,并且 Adapter 可以使用有效负载信息运行有效的部分更新。如果负载为空,适配器必须运行完全绑定。适配器不应假定 notify 方法中传递的有效负载将由 onBindViewHolder() 接收。例如,当视图未附加到屏幕时,notifyItemChange() 中的有效负载将被简单地删除。

它是一个列表,因为它是一个合并列表。在更新视图之前,您可能已经多次调用,每次调用都可能具有不同的有效负载。notifyItemChanged

例如,同时,多个线程可以同时请求具有有效负载“fav计数更新”和“图标更改”以及“时间戳更新”的项目更新。因此,假设您的有效负载是第 0 项是不明智的。


答案 2

推荐