728x90

두번, 중복 클릭 방지 하는 많은 방법들이 있지만 한번 만들어두면 편하게 두고 두고 쓰기 편해서 제가 쓰는 방법 입니다.

 

위에 사진처럼 코틀린 파일 하나 만듭니다.

 

//중복 클링 방지
class OnThrottleClickListener(
    private val clickListener: View.OnClickListener,
    private val interval: Long = 1000
) :
    View.OnClickListener {

    private var clickable = true
    // clickable 플래그를 이 클래스가 아니라 더 상위 클래스에 두면
    // 여러 뷰에 대한 중복 클릭 방지할 수 있다.

    override fun onClick(v: View?) {
        if (clickable) {
            clickable = false
            v?.run {
                postDelayed({
                    clickable = true
                }, interval)
                clickListener.onClick(v)
            }
        } else {
            Log.d(LogTag, "waiting for a while")
        }
    }
}

// OnThrottleClickListener.kt
fun View.onThrottleClick(action: (v: View) -> Unit) {
    val listener = View.OnClickListener { action(it) }
    setOnClickListener(OnThrottleClickListener(listener))
}

만든 클래스 파일 안에 위에 코드를 추가합니다.

인터벌 숫자에 따라서 중복클릭 방지 시간이 달라집니다.

현재 코드는 1000 = 1초 입니다.

 

  //로그인 진행
        binding.userLogin.onThrottleClick {
            Log.d(LogTag, "userLogin")
            }

위에 코드처럼 setOnClickListener 대신 onThrottleClick 사용하면 됩니다.

 

출처: https://android-dev.tistory.com/32

 

728x90

+ Recent posts