Как получить индекс позиции при горизонтальном прокручивание RecyclerView?
В приложении есть горизонтальный RecyclerView в котором происходит выбор карточки в виде карусели, где главный элемент занимает центральную позицию. Как можно получить индекс текущей позиции объекта при свайпе?
Ответы (2 шт):
Позицию можно получить в адаптере, через метод отрисовки элемента списка:
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)
}
})
Позицию можно получить в адаптере, через метод отрисовки элемента списка:
В адаптере передается следующий готовящийся элемент, а не текущий
и дальше передавать в активность/фрагмент при клике.
По клику можно получить, но хочется по скролингу
Либо можно через слушатель
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. Благодарю за ответ.
