Handler.postdelay() 在滚动状态更改时无法在回收器视图中工作
Handler.postdelay() not working inside recycler view on scroll state change
我基本上是在 scroll state change
上尝试在我的 RecyclerView
中执行一个方法,这里我使用 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)
}
}
})
问题是您在处理完整的 onScrollStateChanged
之后调用 setIndexBarVisibilty
。换句话说,recyclerView
在 setIndexBatVisibility
之前呈现。
要解决这个问题,只需在 setIndexBarVisibility
之后调用 invalidate
...
var updater:Runnable?=null
updater = object:Runnable {
override fun run() {
rvsongs!!.setIndexBarVisibility(false)
rvsongs.invalidate()
}
}
...
我基本上是在 scroll state change
上尝试在我的 RecyclerView
中执行一个方法,这里我使用 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)
}
}
})
问题是您在处理完整的 onScrollStateChanged
之后调用 setIndexBarVisibilty
。换句话说,recyclerView
在 setIndexBatVisibility
之前呈现。
要解决这个问题,只需在 setIndexBarVisibility
invalidate
...
var updater:Runnable?=null
updater = object:Runnable {
override fun run() {
rvsongs!!.setIndexBarVisibility(false)
rvsongs.invalidate()
}
}
...