我现在正在制作一个DiffUtil
类来仅更新RecyclerView
.
我看过其他几个示例代码。
在比较两个对象的时候,他们比较的是唯一值,比如Model(Data)
类中定义的id areItemsTheSame()
。
但是,我认为很难将id
or分配unique value
给 List,或者代码很乱。
我必须id
像这样定义和比较吗?
我真的需要在Model class
分隔每个对象的 中定义一个唯一的 Id 变量吗?或者我不应该简单地使用equals()
?
使用 this 不只是比较对象的地址,还比较对象的内容?
作为一个附加问题
DiffUtil.CallBack
和 和有什么不一样DiffUtil.ItemCallBack
?
这是我的代码。
例程模型.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);
}
}