【发布时间】:2021-01-23 05:24:52
【问题描述】:
如何防止用户多次点击一个按钮?。
实际问题:如果用户一直快速点击按钮。按钮点击多次执行我的api调用。
Applied Solution Not Work:即使你试图在onClick()之后直接禁用按钮,仍然有可能发生多次点击。
【问题讨论】:
标签: android kotlin android-fragments android-activity onclick
如何防止用户多次点击一个按钮?。
实际问题:如果用户一直快速点击按钮。按钮点击多次执行我的api调用。
Applied Solution Not Work:即使你试图在onClick()之后直接禁用按钮,仍然有可能发生多次点击。
【问题讨论】:
标签: android kotlin android-fragments android-activity onclick
解决 Android 多次点击问题 — Kotlin
我搜索了社区并找到了惊人的解决方案,例如创建一个自定义点击监听器,该监听器将保留最后一次点击时间并阻止点击特定时间段 但是——作为 Kotlin 的忠实粉丝——我正在考虑使用 lambda 和闭包的强大功能来非常流畅地使用一些东西。 所以我想出了这个实现,希望对你有所帮助
第 1 步:创建名为 SafeClickListener.kt 的类
class SafeClickListener(
private var defaultInterval: Int = 1000,
private val onSafeCLick: (View) -> Unit
) : View.OnClickListener {
private var lastTimeClicked: Long = 0
override fun onClick(v: View) {
if (SystemClock.elapsedRealtime() - lastTimeClicked < defaultInterval) {
return
}
lastTimeClicked = SystemClock.elapsedRealtime()
onSafeCLick(v)
}
}
第 2 步:添加扩展功能使其适用于任何视图,这将创建一个新的 SafeClickListener 并将工作委托给它。
fun View.setSafeOnClickListener(onSafeClick: (View) -> Unit) {
val safeClickListener = SafeClickListener {
onSafeClick(it)
}
setOnClickListener(safeClickListener)
}
第 3 步:现在很容易使用它。只需将 button1.setonclicklistner 替换为 setSafeOnClickListener。
settingsButton.setSafeOnClickListener {
showSettingsScreen()
}
【讨论】:
您可以使用以下代码完成任务:
var mLastClickTime = 0L
fun isClickRecently(): Boolean {
if (SystemClock.elapsedRealtime() - mLastClickTime < 1000) {
return true
}
mLastClickTime = SystemClock.elapsedRealtime()
return false
}
你可以在按钮点击时调用这个函数。
button.setOnClickListener {
if (!isClickRecently()) {
//your task to do
}
}
【讨论】: