你瞅啥?
RecyclerView的刷新基本分为以下两种情况:
1. 如果大量的数据被修改或者被修改数据的位置不确定,这个方法很消耗性能,不到万不得已不要使用,请尽量使用下面的刷新方法。实现如下:
adapter.notifyDataSetChanged();
2. 刷新某一项,定点刷新(常用),消耗性能很少,但是会有定位的问题,可能在过程中需要遍历集合获取操作下标
//刷新某Item中的所有组件
adapter.notifyItemChanged(position);
//刷新某Item中的部分组件
adapter.notifyItemChanged(position, payloads);
//插入Item
adapter.notifyItemInserted(position);
//删除Item
adapter.notifyItemRemoved(position);
//移动Item
adapter.notifyItemMoved(position, position + 1);
DiffUtil的运用逻辑非常简单,大致如下:
实现对比新旧数据的方法(类似比较器),这样DiffUtil便知道当新数据来临时,该不该更新某个item。
更新数据时,把新旧数据丢给DiffUtil,底层会根据你实现的对比方法,利用一种差分算法自动计算出差异,最后局部更新到UI。
DiffUtil的使用也很简单:
1、先实现比较新旧数据的回调,可以是一个独立的类,也可以写成Adapter的内部类:
public class BaseXXXAdapter extends RecyclerView.Adapter {
// ...
private class DiffCallback extends DiffUtil.Callback {
private List oldData, newData;
DiffCallback(List oldData, List newData) {
this.oldData = oldData;
this.newData = newData;
}
@Override
public int getOldListSize() {
return oldData.size();
}
@Override
public int getNew