[英]Android Paging Library: How to intelligently switch Between online and offline data?
[英]Paging Library: How to reload portion of data on demand?
我使用分頁庫對數據集進行分頁。 我想做的是在數據庫中的數據更改后刷新RecyclerView
。
我有這個LiveData
:
val listItems: LiveData<PagedList<Snapshot>> = object : LivePagedListProvider<Long, Snapshot>() {
override fun createDataSource() = SnapshotsDataSource()
}.create(null, PagedList.Config.Builder()
.setPageSize(PAGE_SIZE)
.setInitialLoadSizeHint(PAGE_SIZE)
.setEnablePlaceholders(false)
.build()
)
和DataSource
:
class SnapshotsDataSource : KeyedDataSource<Long, Snapshot>(), KodeinGlobalAware {
val db: FirebaseDb = instance()
override fun getKey(item: Snapshot): Long = item.timestamp
override fun loadInitial(pageSize: Int): List<Snapshot> {
val result = db.getSnapshotsTail(pageSize)
return result
}
override fun loadAfter(key: Long, pageSize: Int): List<Snapshot> {
val result = db.getSnapshotsTail(key, pageSize)
return result.subList(1, result.size)
}
override fun loadBefore(key: Long, pageSize: Int): List<Snapshot> {
return emptyList()
}
}
Adapter
是直截了當的,因此在此省略。
我試圖在修改數據庫時執行以下操作:
fun reload(position) {
listItems.value!!.loadAround(position)
}
但這沒有幫助。
嘗試不直接調用listItems.value!!.datasource.invalidate()
直接調用DataSource#invalidate()
我在基於Firestore的自定義數據源中遇到相同的問題。 加載一部分數據而又不使所有數據無效並使UI刷新/重新加載的唯一方法似乎是通過與Google的Room ORM庫集成。 不幸的是,這將兩次緩存我的數據,一次是使用Firestore,另一次是使用Room。
請參閱“ 考慮內容更新的工作原理”下的文檔。 進行實時更新的唯一方法是使用PagedList實施Room: 如果您是直接從Room數據庫中加載數據 ,則系統會將更新自動推送到應用程序的UI。
這是不可能的。 您只能使整個列表無效:datasource.invalidate()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.