android - 无法使用分页刷新 recyclerView
问题描述
我有一个RecyclerView
充满分页数据的。
我需要能够通过 刷新它SwipeRefreshLayout
,但到目前为止,我无法这样做。
我已经尝试了很多与此类似的参考,但没有任何成功。另外,为了让你们知道,当我刷新时,数据会被正确检索,但它没有显示在 recyclerView 上......
此外,当我从那个目的地移动到另一个 viaNavigation
然后我回击时,它会更新。我不确定我错过了什么或我做错了什么。
视图模型:
class ActivityViewModel : ViewModel() {
var itemDataSourceFactory = OperationsDataSourceFactory()
private set
val livePagedList: LiveData<PagedList<Result<Operation?>>>
init {
val config = PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setInitialLoadSizeHint(10)
.setPageSize(10)
.build()
livePagedList = LivePagedListBuilder(itemDataSourceFactory, config).build()
}
fun refresh() {
itemDataSourceFactory.dataSourceLiveData.value?.endCursor = null
itemDataSourceFactory.refresh()
}
}
数据源工厂:
class OperationsDataSourceFactory :
DataSource.Factory<String, Result<Operation?>>() {
val dataSourceLiveData = MutableLiveData<OperationsDataSource>()
lateinit var dataSource: OperationsDataSource
override fun create(): DataSource<String, Result<Operation?>> {
dataSource = OperationsDataSource()
dataSourceLiveData.postValue(dataSource)
return dataSource
}
fun refresh(){
dataSourceLiveData.value?.invalidate()
}
}
而且,在片段上,我有这样的东西:
private fun initView() {
binding.swipeToRefresh.setOnRefreshListener {
itemViewModel.refresh()
}
getData() //observables with adapter.submitList(list)
}
解决方案
好的,经过长时间的研究,可能不是最好的解决方案,但开发人员也使用它。我们需要使layoutManager
and 适配器“无效”。
swipeToRefresh.setOnRefreshListener {
operationsRecycler.apply {
layoutManager = null
adapter = null
layoutManager = LinearLayoutManager(
requireContext(),
LinearLayoutManager.VERTICAL,
false
)
adapter = myAdapter
}
推荐阅读
- python - 无法使用 subplot 命令组合绘图
- python - 有 2 个字典,我想附加第二个字典中的匹配键并将它们作为列表 f 字典存储在父字典中
- sql-server - T-SQL MERGE 不会按预期处理 NULL
- sql-server - ogr2ogr 不创建表
- ios - JSONMedel 库中的模型级联不起作用
- reactjs - 在本机反应中获取轮播中的动态图像
- node.js - Rich Embed 中的 Discord.js 标记通道
- wordpress - W3总缓存WordPress插件启用后仍然查询数据库
- google-bigquery - 将行从一个表过滤到另一个表
- sql-server - 如何用分号分隔 nvarchar 列