RecyclerView局部刷新数据
在项目中,目前我们常用RecyclerView来加载列表数据,而刷新数据时,我们常常用notifyDataSetChanged();来刷新全部列表数据,用notifyItemChanged(position);来刷新列表中某一项的数据,正常情况下都是ok的。但是遇到带图片的列表,这样的刷新方式就很糟糕了。比如列表中带图片、浏览数,点赞量等等一系列数据。现在我只想刷新浏览量,用上面的方法就会发现,每刷新一次,图片就会闪烁一下。这样不仅浪费资源,用户体验也很不好。怎么处理这种情况呢?其实RecyclerView早就为我们考虑到这种情况了。
RecyclerView的局部刷新操作
adapter适配器中,使用onBindViewHolder来进行数据的绑定设置。而我们常用的是onBindViewHolder(@NonNull MyViewHolder holder, int position),但在@Override方法中,我们还能看到onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull List payloads) 这个方法。这就是我们在局部刷新中要用到的。多出来的这个payloads参数就是用来标志刷新哪些地方的。payloads可以是任意类型,作用就是区分刷新哪些数据。
adapter中
payloads.isEmpty()为null表示全部刷新,payloads.get(0)取出用于标记的值。从下面的代码就可以看到,若payloads为null,代表设置全部数据,payloads.get(0)为follow,代表刷新关注。。。。
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position, @NonNull List<Object> payloads) {
if (payloads.isEmpty()){
//为null表示全部刷新
}else{