Библиотека подкачки Android с настраиваемыми элементами смещения источника данных в RecyclerView

Я делаю приложение со списком TO-DO и хочу иметь этот необычный список, в котором задачи сгруппированы под заголовком с датой (аналогично тому, что Splen-DO). Я использую библиотеку Android Paging (с RecyclerView) с комнатой (как хранилище данных). Для заголовков я использую типы представления RecyclerView, а для добавления заголовков в список я использую настраиваемый источник данных, который обертывает источник данных комнаты и вместо возврата объекта задачи он возвращает объект, который может быть либо задачей, либо Заголовок.

Работает это так:

  • Библиотека подкачки запрашивает у моего источника данных загрузку элементов, вычисляет смещение, вызванное заголовками, загружает данные из базы данных, добавляет заголовки в список задач (и заголовков) и возвращает его.
  • Библиотека подкачки страниц использует мой адаптер для создания ViewHolders и представлений и отображает результат

Все работает нормально, пока я не внесу изменения в базу данных. Элементы перемещаются в RecyclerView без причины, некоторые дублируются, и есть несколько пустых заполнителей на начальном этапе RecyclerView. До сих пор я пытался решить пустые заполнители в вопросе попрошайничества.

Сначала я проверил свой источник данных, он возвращает правильные данные без смещения. Потом проверил переходник. Метод getItem () возвращает все элементы со смещением и некоторые нулевые элементы в начале. Когда я начал копать глубже, я обнаружил, что это вызвано некоторым mLoadingNullCount в PagedStorage, для которого я понятия не имею, для чего он используется, потому что у него нет документации.

Скриншоты

Список работает справа
Список работает справа
Пустые заполнители вверху списка, после того как я внес в него изменения
Пустые заполнители
Список ошибок (gif)
Список ошибок

Некоторый код

Не обращайте внимания на некоторые имена переменных и классов, я использую несколько чешских слов, чтобы они не мешали некоторым системным классам.
Ukol = Задача

Адаптер: UkolListAdapter.java
Источник данных: _ 2_
Фрагмент: UkolListFragment.java

Примечания

Если вам нужен еще код или объяснение, просто оставьте комментарий, я добавлю его для вас.

Редактировать

Я нашел ошибку. Источник данных из базы данных Room может не давать вам список, начинающийся там, где вы запрашивали, но где он хочет, на loadInitial() и дает вам индекс (где начинается возвращаемый список) в int position параметре onResult(). Итак, я возвращал неверные данные о loadInitial(). Поэтому я добавил несколько алгоритмов, которые вычисляют, какие данные я действительно возвращаю в LoadInitial(). Я не исправил проблему.


person Vít Skalický    schedule 13.05.2018    source источник
comment
Привет, недавно я столкнулся с такой же проблемой ... Вы нашли решение?   -  person Matteo Destro    schedule 14.08.2019
comment
Нет, я сдался. Я думаю, что мой подход был не лучшим.   -  person Vít Skalický    schedule 24.08.2019


Ответы (1)


Вы пробовали setEnablePlaceholders(false) в PagedList.config.Builder?

https://developer.android.com/topic/libraries/architecture/paging/data#define-paging-config

person Horie1024    schedule 06.06.2018
comment
к сожалению, это не помогло - person Vít Skalický; 15.07.2018