Скроллинг в RecyclerView работает только в одну сторону

У меня есть RecyclerView:

<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/chartRecyclerView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:overScrollMode="never"
            app:layout_constraintTop_toTopOf="@+id/line1"
            app:layout_constraintBottom_toBottomOf="@+id/bottomLine"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

c 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.сhartRecyclerView.scrollToPosition(0)
                    } 
                    else -> {
                        Logger.info("scrollToPosition: ${newPosition - 2}")
                        binding.сhartRecyclerView.scrollToPosition(newPosition - 2)
                      
                    }
                }    
        }
    }

Проблема в том, что скроллинг работает, только если новый выбранный элемент имеет позицию в адаптере меньше старого выбранного элемента (т.е. сколлинг работает только в левую сторону). В чём может быть причина этих проблем и как их можно решить?

UPD: При этом если заменить

binding.сhartRecyclerView.scrollToPosition(newPosition - 2)

на

(binding.сhartRecyclerView.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(newPosition - 2, 0)

то всё работает отлично! Но в чём причина этого, я так и не понимаю...


Ответы (0 шт):