Обновление элемента 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);

Это работает, но на сколько это правильно?


Ответы (0 шт):