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

Wer*_*erb 9 java android recycler-adapter android-recyclerview

 public void onBindViewHolder(VH holder, int position, List<Object> payloads) {
        onBindViewHolder(holder, position);
 }
Run Code Online (Sandbox Code Playgroud)

我知道当我们想更新RecyclerView项目中的某些视图而不是全部时,我可以使用

public final void notifyItemChanged(int position, Object payload) {
        mObservable.notifyItemRangeChanged(position, 1, payload);
}
Run Code Online (Sandbox Code Playgroud)

如该代码所示,param是一个对象,但是为什么在Adapter中将其更改为list,而我必须使用它list.get(0)来找到我的有效载荷?

谢谢

use*_*613 5

从Android文档:

部分绑定与完全绑定:

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

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

例如,同时,多个线程可以同时请求带有有效载荷“收藏夹更新”和“图标更改”和“时间戳记更新”的项目更新。因此,假设您的有效载荷为第0个项目是不明智的。