Мой текущий Android Приложение использует LiveData
для отображения элементов в списке RecyclerView
.
Мои данные хранятся в базе данных Room
и извлекаются с помощью этого Dao
метода
@RawQuery(observedEntities = [MyDO::class])
fun fetch(query: SupportSQLiteQuery): DataSource.Factory<Int, MyDO>
Я использую PagedListAdapter
со следующей связанной PagedList
Config
companion object {
val PAGED_LIST_CONFIG = PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setInitialLoadSizeHint(60)
.setPrefetchDistance(20)
.setPageSize(20)
.build()
}
База данных My Room заполняется через вызовы API на удаленный сервер, который извлекает 200 элементов за один вызов.
Метод onChanged
в моем Activity
вызывается каждый раз, когда я вставляю страницу из 200 элементов в базу данных.
Метод onChanged всегда получает те же 60 элементов.
Я бы понял, что onChanged
срабатывает, если он каждый раз получает разные элементы.
Также, как только все элементы были получены с удаленного сервера, список находится в верхней части элементов.
Что мне не хватает в моем понимании LiveData
и PagedList
s
Почему срабатывает onChanged
, но я не получаю измененные элементы, что приводит к тому, что элементы списка «мигают» на каждой вставке страницы?