android - Recyclerview 将项目滚动到顶部并为内部视图的大小滚动更多
问题描述
我有一个带有自定义 LinearLayoutManager 的 recyclerview,它使我能够滚动到所选项目并将该项目捕捉到 recyclerview 的开头。然而,这些项目被划分为类别,每个类别中的第一个项目都有一个标题文本视图。当平滑滚动发生时,我想滚动过去标题。基本上这是我得到的。标题只是项目中的文本视图,并且仅当项目位于类别中的第一个时才可见。
而不是看到这个;
#HeaderForItem1
##ITEM1
##ITEM2
#HeaderForItem3
###ITEM3
###ITEM4
###ITEM5
我也想滚动过去的标题并看到这个;当我滚动到 ITEM1
##ITEM1
##ITEM2
#HeaderForItem3
###ITEM3
###ITEM4
###ITEM5
我尝试在 customlayoutmanager 的 onLayoutComplete 方法中获取所有视图并动态查找标题高度。我设法得到但无法添加到滚动
这是我的自定义布局管理器
internal class LinearLayoutManagerWithSmoothScroller : LinearLayoutManager {
private var offset = 0
constructor(context: Context?) : super(
context,
VERTICAL,
false
) {
}
// map of child adapter position to its height.
private val childSizesMap = mutableMapOf<Int, Int>()
override fun onLayoutCompleted(state: State?) {
super.onLayoutCompleted(state)
val view = getChildAt(0) as LinearLayout
val v = view.getChildAt(0)
offset = v.height
}
override fun smoothScrollToPosition(
recyclerView: RecyclerView, state: RecyclerView.State,
position: Int
) {
val smoothScroller: SmoothScroller = TopSnappedSmoothScroller(recyclerView.context)
smoothScroller.targetPosition = position
startSmoothScroll(smoothScroller)
}
private inner class TopSnappedSmoothScroller(context: Context?) :
LinearSmoothScroller(context) {
override fun computeScrollVectorForPosition(targetPosition: Int): PointF? {
return this@LinearLayoutManagerWithSmoothScroller
.computeScrollVectorForPosition(targetPosition)
}
override fun getVerticalSnapPreference(): Int {
return SNAP_TO_START
}
}
}
我基本上从活动中调用 smoothScrollToPosition(position) 。
你们能指导我如何进行吗?
提前致谢。
解决方案
推荐阅读
- python - 无法安装 mysqlclient
- php - 如何从zend expressive REST api应用程序中调用另一个内部端点?
- python - 如何使用计时器调用函数?
- node.js - CSV 到 Json 库在节点 js 中不起作用
- validation - 在 Postman 测试中使用哪个片段来验证标题值的一部分
- c# - 自 2019 年 10 月 31 日以来,Google 测量协议未在分析报告中显示数据
- python - 如何在 Lambda 函数中读取 S3 文件(在 python 中)
- python - 如何解释 Python 中的类定义?
- validation - Kotlin:如何获取传递给参数的表达式(代码)?
- node.js - 如何在节点 js 上创建传单 tileLayer 对象并将其作为快速 API 的响应发送