簡體   English   中英

分頁庫:如何按需重新加載部分數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM