#android #kotlin #android-recyclerview #android-diffutils #android-paging-3
#Android #kotlin #android-recyclerview #android-diffutils #android-подкачка-3
Вопрос:
Я отправляю запрос в /list.php?page=1 и отображаю данные в пользовательском интерфейсе с помощью компонента подкачки 3.
В первом запросе метод areItemsTheSame(новый, старый) ничего не делает. Нет входа в Logcat.
Затем я обновляю данные с помощью SwipeRefreshLayout и запрашиваю отправленный тот же api (/list.php?page=1).
DiffUtil.Метод ItemCallback areItemsTheSame(новый, старый) проверяет элементы дважды. один раз в порядке убывания, затем в порядке возрастания.
Logcat:
Я: новый элемент: 3308 = Старый элемент: 3308 Я: проверка: истина
Я: новый элемент: 3307 = Старый элемент: 3307 Я: проверка: истина
Я: Новый элемент: 3306 = Старый элемент: 3306 Я: проверка: истина
Я: новый элемент: 3305 = Старый элемент: 3305 Я: проверка: истина
Я: новый элемент:3304 = Старый элемент: 3304 I: проверка: истина
I: новый элемент: 3303 = Старый элемент: 3303 I: проверка: истина
I: Новый элемент: 3302 = Старый элемент: 3302 I: проверка: истина
I: Новый элемент: 3301 = Старый элемент: 3301 I: проверка: истина
I: Новый элемент: 3300 = Старый элемент:3300 I: проверка: истина
I: newItem: 3300 = oldItem: 3300 I: проверка: истина
I: newItem: 3301 = oldItem: 3301 I: проверка: истина
I: newItem: 3302 = oldItem: 3302 I: проверка: истина
I: newItem: 3303 = oldItem: 3303 I: проверка: true
Я: newItem: 3304 = oldItem: 3304 Я: проверка: true
Я: newItem: 3305 = oldItem: 3305 Я: проверка: true
Я: newItem: 3306 = oldItem: 3306 Я: проверка: true
Я: newItem: 3307 = oldItem: 3307 Я: проверка: true
Я:Новый элемент: 3308 = Старый элемент: 3308 Я: проверка: истина
Комментарии:
1. пожалуйста, опубликуйте полный код метода обновления (т.Е. Точное место, где вы вызываете diff util)
2. Я добавил код VacancyFragment, Adapter, ViewModel и DataSource
3. Метод areContentsTheSame() проверяет один раз
4.
submitData
иrefresh
методы тоже, если вы не возражаете5. методы отправки и обновления являются встроенными методами.
Ответ №1:
я думаю, что нашел ответ.
Алгоритм Майерса не обрабатывает перемещаемые элементы, поэтому DiffUtil выполняет второй проход по результату, чтобы обнаружить перемещенные элементы.
https://developer.android.com/reference/androidx/recyclerview/widget/DiffUtil