Android setOnClickListener 중복 클릭 방지하기 with kotlin extension
01 January 2023 -
less than 1 min read time
Tags:
Android
Kotlin
setOnClickListener 확장 함수로 변환
btn.setOnClickListener { }
btn.click { }
fun View.click(click: (View) -> Unit) {
setOnClickListener(click)
}
- 뷰의 클릭 이벤트인 setOnClickListener 메소드가 생각보다 길다
- 코틀린 확장 함수를 이용하여 View.click 이 발생하면 내부적으로 setOnClickListener 로 연결시킨다
- 모든 뷰 이벤트에 click 을 통해 클릭 이벤트를 그대로 사용할 수 있음
중복 클릭 기능도 추가 하기
btn.click { }
fun View.click(click: (View) -> Unit) {
val listener = DuplicateClickListener { click(it) }
setOnClickListener(click)
}
class DuplicateClickListener(private val click: (View) -> Unit) : View.OnClickListener {
companion object {
private const val CLICK_INTERVAL = 1000
}
private var lastClickedTime: Long = 0L
override fun onClick(v: View?) {
if (isSafe() && v != null) {
lastClickedTime = System.currentTimeMillis()
click(v)
}
}
private fun isSafe(): Boolean {
return System.currentTimeMillis() - lastClickedTime > CLICK_INTERVAL
}
}
- 뷰의 클릭 이벤트가 발생했을 때 네트워크 또는 DB 요청을 하기에 중복을 막는 것이 좋은 경우가 많다뷰의 클릭 이벤트인 setOnClickListener 메소드가 생각보다 길다
- click() 이벤트를 DuplicateClickListener 로 전달하고 이전 누른 시간과 현재 시간과의 차이가 1초 미만인지 체크하면 된다
결론
- 코틀린 확장 함수는 핵심 기능이므로 자주 쓰는 것들은 공통 클래스로 만들고 관리해야 함
Related Posts