我使用Paging Library对我的数据集进行分页。我尝试做的是在数据库中的数据发生更改后刷新export default class NewHome extends Component {
render() {
return (
<div>
{this.props.children}
</div>
);
}
}
。
我有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
但它没有帮助。
答案 0 :(得分:2)
尝试致电listItems.value!!.datasource.invalidate()
不是直接DataSource#invalidate()
答案 1 :(得分:1)
我在使用基于Firestore的自定义数据源时遇到了同样的问题。加载一部分数据而又不使所有数据无效并使UI刷新/重新加载的唯一方法似乎是通过与Google的Room ORM库集成。不幸的是,这将两次缓存我的数据,一次是使用Firestore,另一次是使用Room。
请参阅Consider How Content Updates Work下的文档。进行实时更新的唯一方法是通过使用PagedList实现Room:如果您是直接从Room数据库中加载数据,更新将自动推送到应用程序的UI。
答案 2 :(得分:0)
不可能。您只能使整个列表无效:datasource.invalidate()。