Android databinding common click Listener for block double click(안드로이드 데이터 바인딩 더블 클릭 방지 공용 클릭 리스너 )공부방/Android2021. 1. 11. 14:23
Table of Contents
앱을 만들다 보면
특정 버튼을 사용자가 너무 빨리 눌러서
뜻하지 않은 상황을 방지하고 싶을 때가 있습니다.
하지만 문제는 이미 클릭 이벤트를 적용한 상태에서 어떻게 최대한 코드 수정을 줄이고 적용하는가입니다.
만약 databinding을 사용하고 있다면 아래의 코드를 참고해 봅시다.
OnDoubleClickBlockClickListener.kt
class OnDoubleClickBlockClickListener(private val clickListener: View.OnClickListener, private val interval: Long = 1000) : View.OnClickListener {
private var clickable = true
override fun onClick(view: View?) {
if (clickable) {
clickable = false
GlobalScope.launch {
delay(interval)
clickable = true
}
clickListener.onClick(view)
} else {
Log.i("MyLog", "waiting for a while")
}
}
}
ViewBindingAdapter.kt
@BindingAdapter("android:onClick")
fun OnDoubleClickBlock(view: View, listener: View.OnClickListener) {
view.setOnClickListener(OnDoubleClickBlockClickListener(listener))
}
사용 예시
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/sign_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{(v) -> customFunction()}"/>
위처럼 기존 onClick을 그대로 사용 유지하면서
연속 클릭을 막을 수 있기 때문에
쉽게 적용이 가능하다.
만약 데이터 바인딩을 사용하지 않는다면
아래처럼도 사용 가능하다.
ViewClickExtensions.kt
fun View.OnDoubleClickBlockClick(action: (v: View) -> Unit) {
val listener = View.OnClickListener { action(it) }
setOnClickListener(OnThrottleClickListener(listener))
}
사용 예시
MainActivity.kt
tv_main.OnDoubleClickBlockClick({
yourFunction()
})
위의 기능을 가지고 여러 형태로 클릭 이벤트를 프로젝트에 자연스럽게 녹여낼 수 있으니
잘 사용하시길 바랍니다.
반응형
'공부방 > Android' 카테고리의 다른 글
@soycrab :: 꿀맛코딩
행복한 코딩을 위하여!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!