我正在使用分页(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/