【发布时间】:2021-05-05 22:04:04
【问题描述】:
我现在正在创建一个 DiffUtil 类来仅更新 RecyclerView 中更改的项目。
我看过其他几个示例代码。
比较两个对象的时候,比较的是唯一值,比如areItemsTheSame()中Model(Data)类中定义的id。
不过,我觉得给List赋值id或者unique value比较困难,不然代码比较乱。
我必须像这样定义和比较id吗?
我真的需要在 Model class 中定义一个唯一的 Id 变量来分隔每个对象吗?
还是我不应该只使用equals()?
使用this是不是不仅比较对象的地址,还比较对象的内容?
作为附加问题
DiffUtil.CallBack 和 DiffUtil.ItemCallBack 有什么区别?
这是我的代码。
RoutineModel.java
public class RoutineModel {
private ArrayList<RoutineDetailModel> routineDetailModels;
private String routine;
public RoutineModel(ArrayList<RoutineDetailModel> items, String routine) {
this.routine = routine;
this.routineDetailModels = items;
}
public ArrayList<RoutineDetailModel> getDetailItemList() {
return routineDetailModels;
}
public int getDetailItemSize() {
return routineDetailModels.size();
}
public String getRoutine() {
return routine;
}
public void setRoutine(String routine) {
this.routine = routine;
}
}
RoutineDiffUtil.java
public class RoutineDiffUtil extends DiffUtil.Callback {
private final List<RoutineModel> oldRoutineList;
private final List<RoutineModel> newRoutineList;
public RoutineDiffUtil(ArrayList<RoutineModel> oldRoutineList, ArrayList<RoutineModel> newRoutineList) {
this.oldRoutineList = oldRoutineList;
this.newRoutineList = newRoutineList;
}
@Override
public int getOldListSize() {
return oldRoutineList.size();
}
@Override
public int getNewListSize() {
return newRoutineList.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return oldRoutineList.equals(newRoutineList);
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return oldRoutineList.equals(newRoutineList);
}
}
【问题讨论】:
标签: java android android-diffutils