android-paging-3 - onItemRangeInserted 不适用于使用 insertSeparators
问题描述
mAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
if (positionStart == 0) {
LogUtils.d("================= scroll to top")
binding.rv.layoutManager?.scrollToPosition(0)
autoScrollToStartFlag = false
}
}
})
我希望 recyclerView 在插入新项目时滚动到顶部,它适用于上面的代码。然后我使用下一个代码将分隔符添加到 recyclerVeiw,
binding.rv.layoutManager?.scrollToPosition(0)
不再起作用。
Pager(...)
.flow
.map { pagingData ->
pagingData.map {
UiModel.SyncUiModel(it)
}
.insertSeparators<UiModel.SyncUiModel, UiModel>{ model: UiModel.SyncUiModel?, model2: UiModel.SyncUiModel? ->
LogUtils.d("================= before: ${model?.id ?: "empty"} after: ${model2?.id ?: "empty"}")
if (model == null) return@insertSeparators UiModel.SeparatorModel("head")
if (model2 == null) return@insertSeparators UiModel.SeparatorModel("foot")
return@insertSeparators null
}
}.cachedIn(viewModelScope)
日志 :
================= scroll to top
================= before: empty after: 953
================= before: 953 after: 952
================= before: 952 after: 950
================= before: 950 after: 949
================= before: 949 after: 946
================= before: 946 after: 944
================= before: 944 after: 937
似乎binding.rv.layoutManager?.scrollToPosition(0)
在 insertSeparators 之前执行得太早了。
解决方案
推荐阅读
- javascript - 当我在组件中使用地图时出现未定义元素的问题 ti 显示任务列表
- python - 使用嵌套结构的参数使用 django-graphene 过滤父级
- google-chrome - 如何找出 Google Sheet 查询 #N/A 错误(仅在打开时)
- artificial-intelligence - 如何确定水壶问题的 A* 算法的成本和启发式算法
- amazon-dynamodb - 具有低基数分区键的 DynamoDB 全局二级索引是否有大小限制?
- c# - 将渲染器的所有材质更改为一种材质
- regression - 使用比例的 metafor 包中的 R 元回归气泡图
- amazon-redshift - AWS Redshift - 身份字段语法
- asp.net - XmlException:根级别的数据无效。第 1 行,位置 1
- azure-devops - TFS Undo 将团队项目转换为分支