Случайно прыгающие элементы в 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 с такими же результатами.

0 ответов