Doi*_*nhe 5 android kotlin android-architecture-components android-paging android-paging-library
我有一个应用程序,它从 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()
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的片段上填充适配器的代码:
private fun fetchData(filters: Filters) {
lifecycleScope.launch {
charactersViewModel.getList(filters).collectLatest { pagedList ->
characterAdapter.submitData(pagedList)
}
}
}
Run Code Online (Sandbox Code Playgroud)
当前行为:
我已经尝试过的:
由于我获取数据异步我使用这段代码从这个尝试的文章,以防止在加载数据时适配器是空的。但它没有用
characterAdapter.stateRestorationPolicy = RecyclerView.Adapter.StateRestorationPolicy.PREVENT_WHEN_EMPTY
Run Code Online (Sandbox Code Playgroud)
我期望达到的目标:
能够滚动到列表底部并在不丢失滚动位置的情况下进行配置更改“无需随着列表变大而增加我的pageSize ”
您正在寻找的方法是PagingSource.getRefreshKey(). 它给出了先前的状态 a PagingState,其中包含字段PagingState.anchorPosition,即最后访问的索引(包括占位符)。
https://developer.android.com/topic/libraries/architecture/paging/v3-network-db#refresh-in-place
编辑:我现在看到您正在使用 Room 的实现。实际上存在一些与 Remote REFRESH 及其 getRefreshKey 实现相关的错误,应在下一版本 (alpha07) 中解决。请参阅https://issuetracker.google.com/issues/167260236
| 归档时间: |
|
| 查看次数: |
1907 次 |
| 最近记录: |