RecycleView刷新某一个item中的某一个view

1,858 阅读1分钟

有时候我们使用recycleview的时候需要实现局部刷新且刷新item中的某一个空间,比如进度条,比如未读数等,这时候我们只需要调用adapter中的notifyItemChanged方法,且方法中带有 Object payload参数的。例如

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

然后重写onBindViewHolder(ViewHolder holder, int position, List payloads)。注意这里是3个参数的方法,由于两个参数的onBindViewHolder是抽象的 我们也必须重写。如果在两个参数的方法中写了逻辑代码,那么三个参数的方法中就不能在调用super了否则会执行两次两个参数的onBindViewHolder,因为三个参数的源码是这样的:

public void onBindViewHolder(VH holder, int position, List<Object> payloads) {    onBindViewHolder(holder, position);}

所以我们要么将两个参数方法空实现,要么在三个参数方法中去掉super,然后内部调用两个参数。具体可以自己去实现,注意一下这点就可以了。我们notifyItemChanged传过来的payload就在onBindViewHolder的List payloads参数中,取到第0条然后做你的逻辑判断就可以只刷新某一个view啦。 该注意的是这样当这个item不在屏幕之上的时候是不会被调用的,只有在屏幕之上时才会只刷新某一个view