快速滚动时随机跳出PagedList中的项目

时间:2018-12-07 12:14:39

标签: android android-room android-architecture-components android-architecture-paging

我正在从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的报告。

另一件事-通过roomDataSource检索的项目不是恒定大小或相同页面大小。

    val dataSourceFactory = dao.itemsDataSourceFactory(userId)
            .mapByPage{ items -> 
                Log.d("${items.map { it.position }}")
                items
            }
上面的代码记录了截然不同的结果。页面大小可以从表中的任何一项到位置不同的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.1room版本1.1.1
在最新的androidx.paging:paging-runtime:2.1.0-rc01上进行了测试,结果相同。

0 个答案:

没有答案