问题描述
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/chartRecyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:overScrollMode="never"
android:layout_marginHorizontal="@dimen/spacing_xs"
app:layout_constraintTop_toTopOf="@+id/line1"
app:layout_constraintBottom_toBottomOf="@+id/bottomLine"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
chartRecyclerView.run {
layoutManager = linearlayoutmanager(
binding.сhartRecyclerView.context,RecyclerView.HORIZONTAL,false
)
adapter = ChartAdapter(this@Chart)
}
我正在屏幕上显示5个RecyclerView项目,我希望用户单击的项目居中。为此,我使用以下代码:
override fun onChartColumnClicked(item: SurveyChartColumnData) {
val items = adapterItems.value ?: return
val newPosition = items.indexOf(item)
Logger.info("newPosition: $newPosition")
if (newPosition in items.indices) {
val oldSelectedItemPosition = items.indexOfFirst { it.isSelected }
val oldSelectedItem = items.first { it.isSelected }
if (oldSelectedItemPosition == newPosition) {
return
}
oldSelectedItem.isSelected = false
item.isSelected = true
when {
newPosition < CENTRAL_POSITION -> {
Logger.info("scrollToPosition: 0")
binding.chartRecyclerView.scrollToPosition(0)
}
else -> {
Logger.info("scrollToPosition: ${newPosition - 2}")
binding.chartRecyclerView.scrollToPosition(newPosition - 2)
}
}
}
}
存在以下问题:仅当新选定元素的adapterPosition小于旧选定元素的adapterPosition时,滚动才起作用(即,滚动仅向左方向起作用)。这些问题的原因可能是什么,如何解决?
UPD
但是如果我替换
binding.сhartRecyclerView.scrollToPosition(newPosition - 2)
进入
(binding.сhartRecyclerView.layoutManager as linearlayoutmanager).scrollToPositionWithOffset(newPosition - 2,0)
所有作品都像魅力!但我仍然不明白其原因...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)