我有一个应用程序,它从 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,它解决了这个问题。
我已经尝试过的:
由于我是异步获取数据,因此我尝试使用本文中的这段代码来防止在适配器为空时加载数据。但它没有用
characterAdapter.stateRestorationPolicy = RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY
我期望达到的目标:
能够滚动到列表底部并在不丢失滚动位置的情况下进行配置更改“而无需在列表变大时增加我的pageSize ”