В DiffUtil.Callback есть две функции, которые нужно переопределить:
areContentsTheSame(int oldItemPosition, int newItemPosition)
getChangePayload(int oldItemPosition, int newItemPosition)
Я знаю прежние проверки, изменилось ли содержимое, я бы хотел просто сравнить, если это один и тот же экземпляр, напрямую используя '==', потому что я верю, что мой предмет будет новым экземпляром, когда он будет обновлен. Но то же сравнение дает другой результат в последней функции. Вот код:
public class MyDiffUtilCallback extends DiffUtil.Callback {
List<App> mNewList;
List<App> mOldList;
public MyDiffUtilCallback(List<App> newList, List<App> oldList) {
mNewList = newList;
mOldList = oldList;
}
@Override
public int getOldListSize() {
return mOldList.size();
}
@Override
public int getNewListSize() {
return mNewList.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return mNewList.get(newItemPosition).id == mOldList.get(oldItemPosition).id;
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return mNewList.get(newItemPosition) == mOldList.get(oldItemPosition);
// This always returns false correctly whenever the item gets an update, it's working as expected
}
@Nullable
@Override
public Object getChangePayload(int oldItemPosition, int newItemPosition) {
if (mNewList.get(newItemPosition) == mOldList.get(oldItemPosition)) {
return null; // But this is always being executed
}
return mNewList.get(newItemPosition).data; // This is never executed, why?
}
}
Я не понимаю, почему одно и то же сравнение старого и нового элементов дает разные результаты, суперкласс изменяет список или что-то еще?