Обратный вызов DiffUtil для списка разного размера ⇐ Android
Обратный вызов DiffUtil для списка разного размера
Я сравниваю два списка, чтобы найти различия между ними, используя специальную реализацию обратного вызова DiffUtil, но эти два списка имеют разный размер, и когда я зарегистрировал сравниваемые элементы в обоих списках в элементах «areItemsTheSame» и «areContentsTheSame», которые сравниваются, ограничены размером списка с наименьшим количеством элементов, и, следовательно, когда в моем адаптере я вызываю 'dispatchUpdatesTo', добавляется новый элемент, но его содержимое такое же, как и последние элементы из старого списка
Реализация этих методов:
@Override public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { return mOldList.get(oldItemPosition).equals(mNewList.get(newItemPosition)); } @Override public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { return mOldList.get(oldItemPosition).equals(mNewList.get(newItemPosition)); } Например:
(Старый)Список A = "A","B","C","D","E","F","G","I"
(Новый)Список B = "A","B","C","D","E","F","G","I","K"
при входе в систему я обнаружил, что «areItemsTheSame» и «areContentsTheSame» сравнивают элемент только до «I» и, следовательно, возвращают true для всех вызовов, а после вызова диспетчера UpdatesTo для адаптера в список добавляется новый элемент, но это «I», а не "к"
Итак, я получаю список A = "A", "B", "C", "D", "E", "F", "G", "I", "I"
Я сравниваю два списка, чтобы найти различия между ними, используя специальную реализацию обратного вызова DiffUtil, но эти два списка имеют разный размер, и когда я зарегистрировал сравниваемые элементы в обоих списках в элементах «areItemsTheSame» и «areContentsTheSame», которые сравниваются, ограничены размером списка с наименьшим количеством элементов, и, следовательно, когда в моем адаптере я вызываю 'dispatchUpdatesTo', добавляется новый элемент, но его содержимое такое же, как и последние элементы из старого списка
Реализация этих методов:
@Override public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { return mOldList.get(oldItemPosition).equals(mNewList.get(newItemPosition)); } @Override public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { return mOldList.get(oldItemPosition).equals(mNewList.get(newItemPosition)); } Например:
(Старый)Список A = "A","B","C","D","E","F","G","I"
(Новый)Список B = "A","B","C","D","E","F","G","I","K"
при входе в систему я обнаружил, что «areItemsTheSame» и «areContentsTheSame» сравнивают элемент только до «I» и, следовательно, возвращают true для всех вызовов, а после вызова диспетчера UpdatesTo для адаптера в список добавляется новый элемент, но это «I», а не "к"
Итак, я получаю список A = "A", "B", "C", "D", "E", "F", "G", "I", "I"
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Это лучший способ перебрать два односвязных списка разного размера и статический массив?
Anonymous » » в форуме C++ - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Использование Recyclerview с Diffutil.ItemCallback не прокручивается вверх?
Anonymous » » в форуме Android - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-