Handler.postdelay () не работает в представлении рециркулятора при изменении состояния прокрутки - PullRequest
3 голосов
/ 27 мая 2019

Я в основном пытаюсь выполнить метод в моем RecyclerView внутри на scroll state change здесь я использую поток Handler для выполнения метода после некоторой задержки, но метод не выполняется вообще, но как бы то ни было если я помещаю этот метод вне потока обработчика, он выполняется успешно, поэтому мой вопрос заключается в том, почему я не могу запустить поток Handler внутри RecyclerView onscroll, вот мой код, пожалуйста, посмотрите.

rvsongs!!.addOnScrollListener(object: RecyclerView.OnScrollListener(){
                override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) {
                super.onScrollStateChanged(recyclerView, newState)
                if(newState== SCROLL_STATE_IDLE) {
                    val timerHandler = Handler()
                    var updater:Runnable?=null
                    updater = object:Runnable {
                        override fun run() {
                            rvsongs!!.setIndexBarVisibility(false)//this method is not getting executed however when put outside handler thread it's executed without any problem
                        }
                    }
                    timerHandler.postDelayed(updater,100)
                }
                else
                {
                    rvsongs!!.setIndexBarVisibility(true)
                }
            }
        })

1 Ответ

1 голос
/ 27 мая 2019

Проблема заключается в том, что вы звоните setIndexBarVisibilty после того, как завершено onScrollStateChanged.Другими словами, recyclerView отображается до setIndexBatVisibility.

. Чтобы решить эту проблему, просто позвоните invalidate после setIndexBarVisibility

       ...
       var updater:Runnable?=null
        updater = object:Runnable {
            override fun run() {
                rvsongs!!.setIndexBarVisibility(false)
                rvsongs.invalidate()
            }
        }
        ...
...