我有一个应用程序,从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,即使列表变得更大