Как определить состояние прокрутки в Android RecyclerView, когда прокрутка запускается перетаскиванием полосы прокрутки - PullRequest
0 голосов
/ 27 апреля 2019

Мне нужно выполнить задачу в 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

...