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