我的应用程序有一个问题,如果用户快速地多次单击按钮,那么在我的按住按钮的对话框消失之前就会生成多个事件
我知道一个解决方案,当一个按钮被点击时,将一个布尔变量设置为一个标志,这样就可以在对话框关闭之前阻止以后的点击。然而,我有很多按钮,每次都要为每个按钮做这件事似乎有点过头了。在android中有没有其他方法(或者可能是更聪明的解决方案)来只允许每次点击按钮时生成事件操作?
更糟糕的是,在处理第一个操作之前,多个快速单击似乎会生成多个事件操作,所以如果我想禁用第一个单击处理方法中的按钮,队列中已经有现有的事件操作等待处理!
请帮帮忙谢谢
发布于 2019-07-15 14:26:01
我的解决方案是,当我们从片段和活动中退出(销毁)时需要调用removeall:
import android.os.Handler
import android.os.Looper
import java.util.concurrent.TimeUnit
//single click handler
object ClickHandler {
//used to post messages and runnable objects
private val mHandler = Handler(Looper.getMainLooper())
//default delay is 250 millis
@Synchronized
fun handle(runnable: Runnable, delay: Long = TimeUnit.MILLISECONDS.toMillis(250)) {
removeAll()//remove all before placing event so that only one event will execute at a time
mHandler.postDelayed(runnable, delay)
}
@Synchronized
fun removeAll() {
mHandler.removeCallbacksAndMessages(null)
}
}https://stackoverflow.com/questions/16534369
复制相似问题