在RecyclerView中,我们时常会用到局部刷新,我们大多数是使用:notifyItemChanged。
我在使用这个局部刷新过程中突然发现我有几个notifyItemChanged没有效果,我就在:
onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull List<Object> payloads)
之中,看payloads是否有数据,结果发现我自定义的payload并没有传过来!懵逼了,我在想是不是我在Recycler view中定义了两种布局导致的。于是就去把两种布局简化了合并到一个Layout中,结果还是没有效果,我后面在网上百度找到一篇很有作用的文章,他说:如果你在几个payload传值时如果之间有一个payload为null,payload就会清空。
文章在这:——》——》paylload为空;
于是我就把所有:adapter.notifyItemChanged(y,"a");//局部刷新,都加上字符,哪怕不需要加的我都大撒谎给你了双引号,但还是没有效果!!!炸裂!
后来我觉得可能是:adapter.notifyDataSetChanged();的原因,我就把这个删除掉,重新运行并在重写onBindViewHolder位置等传回来的数据这一次就ok了,数据传回来了,局部刷新终于实现了。
看效果:
1.准备刷新的位置:
if (verUp.toString().trim().equals(ver+" 设备可更新!")){
upAdapter.notifyItemChanged(y,"statuColor");//刷新payload为statuColor
// itemChange.itemChange(y,"statuColor");
}else {
// itemChange.itemChange(y,"statu");
upAdapter.notifyItemChanged(y,"statu");//刷新payload为statu的数据
}
2.重写 onBindViewHolder获取刷新数据:
if (payloads.get(0).toString().equals("statu")){
holder.runTime.setText(equipmentBean.getUptime());
holder.statue.setText(equipmentBean.getStatus());
holder.router_version.setText(equipmentBean.getVer());
}else if (payloads.get(0).toString().equals("statuColor")){
holder.runTime.setText(equipmentBean.getUptime());
holder.statue.setText(equipmentBean.getStatus());
holder.router_version.setText(equipmentBean.getVer());
holder.router_version.setTextColor(Color.RED);
}
3.传过来的数据
ok,可以局部刷新了!