【发布时间】:2020-03-08 22:20:24
【问题描述】:
我的数据库查询操作可能需要很长时间,所以我想在查询进行时显示一个 ProgressBar。当用户更改排序选项时,这尤其是一个问题,因为它会显示旧列表一段时间,直到新列表出现并更新 RecyclerView。我只是不知道在哪里为这样的查询捕获 Loading 和 Success 状态。
这是我从数据库中获取 PagedList 的方法:
fun getGameList(): LiveData<PagedList<Game>> {
// Builds a SimpleSQLiteQuery to be used with @RawQuery
val query = buildGameListQuery()
val dataSourceFactory: DataSource.Factory<Int, Game> = database.gameDao.getGameList(query)
val data: LiveData<PagedList<Game>> = LivePagedListBuilder(dataSourceFactory, DATABASE_PAGE_SIZE)
.build()
return data
}
我通过观察这个来更新我的列表:
val games = Transformations.switchMap(gameRepository.sortOptions) {
gameRepository.getGameList()
}
我需要自定义 DataSource 和 DataSource.Factory 吗?如果是这样,我什至不知道从哪里开始。我相信这将是一个 PositionalDataSource,但我在网上找不到任何实施自定义示例的示例。
我还在我的 RecyclerView 适配器上尝试了adapter.registerAdapterDataObserver()。这会在显示新列表数据时触发各种回调,但我无法辨别加载开始和停止时的回调。
【问题讨论】:
标签: android android-room android-architecture-components android-paging android-paging-library