Случайно прыгающие элементы в PagedList при быстрой прокрутке - PullRequest
0 голосов
/ 07 декабря 2018

Я получаю элементы из 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 database.

Проблема в том, что, когда пользователь быстро прокручивает / перебрасывает элементы списка внизу списка, начинают прыгать.Как будто они перемещаются из одной позиции в другую.А после 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 с такими же результатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...