Search code examples
androidkotlinandroid-fragmentsandroid-activityonclick

Prevent or avoid Multiple clicks in Android app (Kotlin Language)


How to prevent user from doing multiple clicks on a button??.

Actual problem: if user keep clicking on the button very quickly. Button click execute my api call multiple times.

Applied Solution Not Work: Even if you tried to disable the button directly after onClick(), still there is a probability to have multiple click happened.


Solution

  • Solving Android multiple clicks problem — Kotlin

    I searched the community and found amazing solution like creating a custom click listener that will preserve the last click time and prevent clicking for a specific period But — as a big fan of Kotlin — I was thinking to have something to use very smoothly using the power of lambdas and closures. So I came up with this implementation, hope to help you

    Step 1 : Create class with name 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)
         } 
     }
    

    Step 2 : Add extension function to make it works with any view, this will create a new SafeClickListener and delegate the work to it.

        fun View.setSafeOnClickListener(onSafeClick: (View) -> Unit) {
        val safeClickListener = SafeClickListener {
            onSafeClick(it)
          }
        setOnClickListener(safeClickListener)
      }
    

    Step 3 : Now it is very easy to use it. Just replace button1.setonclicklistner with setSafeOnClickListener.

    settingsButton.setSafeOnClickListener {
        showSettingsScreen()
    }