【问题标题】:Prevent or avoid Multiple clicks in Android app (Kotlin Language)防止或避免 Android 应用程序中的多次点击(Kotlin 语言)
【发布时间】:2021-01-23 05:24:52
【问题描述】:

如何防止用户多次点击一个按钮?。

实际问题:如果用户一直快速点击按钮。按钮点击多次执行我的api调用。

Applied Solution Not Work:即使你试图在onClick()之后直接禁用按钮,仍然有可能发生多次点击。

【问题讨论】:

    标签: android kotlin android-fragments android-activity onclick


    【解决方案1】:

    解决 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()
    }
    

    【讨论】:

    • 那安全我的百行
    【解决方案2】:

    您可以使用以下代码完成任务:

    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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 2013-05-18
      • 2014-11-29
      • 2013-05-08
      • 1970-01-01
      相关资源
      最近更新 更多