간혹 사용자의 손떨림이나 급한 성격(?)으로 클릭 이벤트를 여러번 보내 원치 않는 결과를 줄 때가 있다.
간단한 확장함수로 편하게 적용 가능하다.
class DebounceOnClickListener(
private val interval: Long,
private val listenerBlock: (View) -> Unit,
) : View.OnClickListener {
private var lastClickTime = 0L
override fun onClick(v: View) {
if (!isNetworkAvailable(v.context)) {
txt("isNetworkAvailable setOnClickListener(###)")
v.context.startActivity(Intent(v.context, NetworkErrorActivity::class.java))
}
val time = System.currentTimeMillis()
if (time - lastClickTime >= interval) {
lastClickTime = time
listenerBlock(v)
}
}
}
Kotlin
복사
fun View.setOnClickListener(debounceInterval: Long, listenerBlock: (View) -> Unit) =
setOnClickListener(DebounceOnClickListener(debounceInterval, listenerBlock))
Kotlin
복사
위와 같이 만들어두면 아래 코드처럼 간단하게 가능하다.
binding.downloadImageView.setOnClickListener(Constants.CLICK_INTERVAL){
//Constants.CLICK_INTERVAL = 600L, 0.6초
}
Kotlin
복사