Обновление элемента RecyclerView используя DiffUtil
У меня есть класс DiffUtil, который принимает новый список и сравнивает его со старым
public class DiffUtilCallback<T extends AdapterItem> extends DiffUtil.Callback {
protected List<T> oldList;
protected List<T> newList;
public void setOldList(List<T> oldList, List<T> newList) {
this.oldList = oldList;
this.newList = newList;
}
@Override
public int getOldListSize() {
return oldList.size();
}
@Override
public int getNewListSize() {
return newList.size();
}
@Override
public boolean areItemsTheSame(int oldPosition, int newPosition) {
return oldList.get(oldPosition).getId().equals(newList.get(newPosition).getId());
}
@Override
public boolean areContentsTheSame(int oldPosition, int newPosition) {
return oldList.get(oldPosition) == newList.get(newPosition);
}
}
Если я добавляю или удаляю элемент из списка то все работает хорошо, но если я изменяю уже существующий в списке элемент то, он не изменяется, так как ссылка на этот элемент совпадает у старого и нового списка. Чтобы решить эту проблему я создаю новый элемент и затем заменяю старый
Item newItem = oldItem.copy();
list.set(i, newItem);
Это работает, но на сколько это правильно?