我正在使用分页(android Jetpack的一部分)从房间DB中检索数据。我想在每个页面上获取50条记录。但是'DataSource.Factory.toLivedata(pageSize)'函数从数据库返回完整数据。

我曾尝试为toLivedata()方法提供配置,但似乎被忽略了

private val config = PagedList.Config.Builder()
        .setInitialLoadSizeHint(50)
        .setPageSize(50)
        .build()

fun getPagedData(): LiveData<PagedList<TransactionEntity>> =
        transactionDao.getAllTransactions().toLiveData(config)

//TransctionDao
@Query("SELECT * FROM transaction_table order by date DESC")
    fun getAllTransactions(): DataSource.Factory<Int, TransactionEntity>

//Observing Live Data
getPagedData().observe(this,Observer<PagedList<TransactionEntity>> { t ->
            Log.d("Activity", "Size is " + t.size)

})


我原本以为PagedList的大小为50,但它始终会提供来自transaction_table的整个记录

最佳答案

您认为所有数据都已加载的原因是PagedList对尚未加载的数据使用占位符,因此在documentation中,大小代表整个数据大小,而不仅仅是加载的数据大小。

如果要更改此设置,可以在配置生成器中使用setEnablePlaceholders(false)。您可以通过调用get(6500)对其进行测试,并且由于尚未加载此项目,因此您应该获得null。

我建议您阅读PlaceHolders部分。

关于android - 即使我提供了每页加载的数据量,数据源也会始终从房间数据库中返回完整数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56253507/

10-13 04:26
查看更多