【发布时间】:2020-11-08 00:19:01
【问题描述】:
我有一个应用程序,它从 API 中获取 158 个项目的列表,将其存储在 Room 中,并将其显示给用户。 RoomDB 是事实的来源。
这是我的 ViewModel 上从数据库中获取结果的代码:
private val pagingConfig =
PagingConfig(pageSize = 20, enablePlaceholders = false, maxSize = 300)
fun getList(filters: Filters): Flow<PagingData<Character>> {
return Pager(pagingConfig) {
repository.getCharacters(filters)
}.flow.map {
it.asDomainModel()
}
}
这是填充适配器的片段上的代码:
private fun fetchData(filters: Filters) {
lifecycleScope.launch {
charactersViewModel.getList(filters).collectLatest { pagedList ->
characterAdapter.submitData(pagedList)
}
}
}
当前行为:
- 当我的第 60 个项目之后发生配置更改时,滚动位置丢失,我发现将 pagingConfig 上的 pageSize 从 20 到 55,它解决了这个问题。
我已经尝试过的:
由于我是异步获取数据,因此我尝试使用 article 中的这段代码来防止在适配器为空时加载数据。但它没有工作
characterAdapter.stateRestorationPolicy = RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY
我期望达到的目标:
能够滚动到列表底部并进行配置更改而不会丢失滚动位置“而无需随着列表变大而增加我的 pageSize”
【问题讨论】:
标签: android kotlin android-architecture-components android-paging android-paging-library