在RecyclerView中滚动只能在一个方向上向左工作

问题描述

我有一个RecyclerView

<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" />

linearlayoutmanager

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 (将#修改为@)