Случайно прыгающие элементы в PagedList при быстрой прокрутке
Я получаю предметы из room
таблица базы данных:
@Query("SELECT * FROM items WHERE owner_id = :ownerId ORDER BY type, position")
abstract override fun itemsDataSourceFactory(ownerId: Int): DataSource.Factory<Int, Item>
PagedList создан с использованием
val builder = LivePagedListBuilder(
dataSourceFactory,
PagedList.Config.Builder()
.setEnablePlaceholders(true)
.setPageSize(ITEMS_PER_PAGE)
.build()
)
.setBoundaryCallback(boundaryCallback)
boundaryCallback
загружает элементы из сети и вставляет их в room
база данных.
Проблема заключается в том, что, когда пользователь быстро прокручивает / перебрасывает, элементы списка внизу списка начинают прыгать. Как будто они перемещаются из одной позиции в другую. А после 1-2 прыжков стабилизируется на правильных позициях. отладка DiffUtil
Я вижу, что он сообщает dispatchRemovals
хотя ни один элемент не удален - просто добавлен.
Другое дело - предметы, полученные из room
с помощью DataSource
не постоянный размер или одинаковый размер страницы.
val dataSourceFactory = dao.itemsDataSourceFactory(userId)
.mapByPage{ items ->
Log.d("${items.map { it.position }}")
items
}
Код выше регистрирует очень разные результаты. Размер страницы может быть от 1 любого элемента в таблице до 20 элементов в разных позициях. Например:
[100, 101, 102, 103, 104]
[80]
[60, 61, 62, 63,64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79]
Так что порядок работает, как и ожидалось, но размеры страниц странные. Не уверен, почему это происходит.
С помощью android.arch.paging:1.0.1
а также room
версия 1.1.1
Проверено на последнем androidx.paging:paging-runtime:2.1.0-rc01
с такими же результатами.