// 在RecyclerView中使用DiffUtil进行优化刷新操作
private class MyAdapter extends RecyclerView.Adapter
private List mData;
// ...
public void setData(List data) {
// 转换前后数据的差异
DiffUtil.DiffResult result = DiffUtil.calculateDiff(new MyDiffCallback(mData, data), false);
mData = data;
// 使用DiffUtil的结果更新列表
result.dispatchUpdatesTo(this);
}
// ...
private static class MyDiffCallback extends DiffUtil.Callback {
private List mOldData, mNewData;
public MyDiffCallback(List oldData, List newData) {
mOldData = oldData;
mNewData = newData;
}
@Override
public int getOldListSize() {
return mOldData.size();
}
@Override
public int getNewListSize() {
return mNewData.size();
}
// 定义一个判断两个数据是否相等的方法
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return mOldData.get(oldItemPosition).getId() == mNewData.get(newItemPosition).getId();
}
// 定义一个判断两个数据内容是否相等的方法
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return mOldData.get(oldItemPosition).equals(mNewData.get(newItemPosition));
}
}
}