要求:一系列的item,然后只需要刷新其中的两个item,其他的不变化,保持原状。
- 设置每个图片的tag,然后刷新的时候,对比每个tag的值,相等的话就不用重新刷新
- Glide那些控件的原因,重新加载后,造成图片刷新。
后面解决的办法:RecyclerView做局部刷新还是非常容易的,其实就是使用好带payload参数的这个notifyItemChanged方法,以及重写带payload的这个onBindViewHolder方法,在onBindViewHolder中去刷新你想更新的控件即可。
其中onBindViewHolder,有两个,可以通过payloads是否为空,来进行刷新。源码:
/* @param holder The ViewHolder which should be updated to represent the contents of the
* item at the given position in the data set.
* @param position The position of the item within the adapter's data set.
* @param payloads A non-null list of merged payloads. Can be empty list if requires full
* update.
*/
public void onBindViewHolder(VH holder, int position, List<Object> payloads) {
onBindViewHolder(holder, position);
}
主要看其中的注释payloads A non-null list of merged payloads. Can be empty list if requires full * update.
下面的是我的代码,可以通过notifyItemChanged(lastSlectCount,"abc");
和notifyItemChanged(position);
, 前面的是刷新原item,后面的是刷新目标item。
@Override
public void onBindViewHolder(ViewHolder holder, int position, List<Object> payloads) {
if (payloads.isEmpty()) {
onBindViewHolder(holder, position);
} else {
if (lastSlectCount != selectCount && lastSlectCount == position) {
holder.tvCount.setActivated(false);
holder.ivSelect.setVisibility(View.GONE);
}
}
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// todo
}
网友评论