Мне нужно выполнить задачу в RecyclerView непосредственно перед началом прокрутки и сразу после ее завершения, но абсолютно не тогда, когда прокрутка все еще продолжается.
Когда пользователь прокручивает, перетаскивая вид вверх или вниз наэкран, это просто.Я просто использую обычные RecyclerView.OnScrollListener
:
private val mInfinityScrollListener = object : RecyclerView.OnScrollListener() {
private var pageHasScrolled: Boolean = false
private var scrollIsStarting: Boolean = false
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
super.onScrollStateChanged(recyclerView, newState)
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
scrollIsStarting = true
}
if (newState == RecyclerView.SCROLL_STATE_IDLE && pageHasScrolled) {
pageHasScrolled = false
####PERFORM END TASKS HERE####
}
}
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
pageHasScrolled = true
if (scrollIsStarting) {
scrollIsStarting = false
### PERFORM INITIAL TASKS HERE ####
}
}
}
Проблема в том, что пользователи прокручивают RecyclerView с помощью , захватывая полосу прокрутки в правой части представления.
OnScroll
срабатывает, но OnScrollStateChanged
не срабатывает, поэтому у меня нет возможности узнать, новый ли это свиток (RecyclerView.SCROLL_STATE_DRAGGING
), текущий или конец свитка (RecyclerView.SCROLL_STATE_IDLE
)
Как определить, когда прокрутка, управляемая полосой прокрутки, начинается и заканчивается?Есть ли другой слушатель, когда пользователь взаимодействует с полосой прокрутки, или что-то подобное?
cheers
John