Как получить индекс позиции при горизонтальном прокручивание RecyclerView?

Рейтинг: 0Ответов: 2Опубликовано: 26.02.2023

В приложении есть горизонтальный RecyclerView в котором происходит выбор карточки в виде карусели, где главный элемент занимает центральную позицию. Как можно получить индекс текущей позиции объекта при свайпе?

Пример RecyclerView из объектов, которые имеют каждый свой цвет, при прокручивании нужно получить номер объекта, чтобы узнать его цвет

Ответы

▲ 0Принят

Позицию можно получить в адаптере, через метод отрисовки элемента списка:

override fun onBindViewHolder(holder: MessageHolder, position: Int) {

и дальше передавать в активность/фрагмент при клике. Либо можно через слушатель OnScrollListener у RecyclerView:

myList.addOnScrollListener(object : RecyclerView.OnScrollListener() {
                override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
                    if (dx > 0) {
                        val visibleItemCount = mLayoutManager.childCount
                        val totalItemCount = mLayoutManager.itemCount
                        val pastVisibleItems = mLayoutManager.findFirstVisibleItemPosition()



                    super.onScrolled(recyclerView, dx, dy)
                }
            })
▲ 1

Позицию можно получить в адаптере, через метод отрисовки элемента списка:

В адаптере передается следующий готовящийся элемент, а не текущий

и дальше передавать в активность/фрагмент при клике.

По клику можно получить, но хочется по скролингу

Либо можно через слушатель OnScrollListener у RecyclerView:

Через OnScrollListener по какой то причине передается 5 событий подряд, хотелось бы уловить самое последние состояние

'''kotlin
mRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (dx > 0) {
val itemPosition = mLayoutManager.findLastVisibleItemPosition()-1
/Toast.makeText(applicationContext, "itemPosition: $itemPosition", Toast.LENGTH_SHORT).show()
}
})
'''

addOnScrollListener нашел только у mRecyclerView. И для текущей позиции больше подходит похоже findLastVisibleItemPosition. Благодарю за ответ.