본문 바로가기

[Android/Kotlin] 안드로이드 Single Click 구현하기 feat. 두번 클릭 방지...

꿈꾸는블로그왕 2021. 1. 22.

오늘은 안드로이드를 개발 할 때 두 번 클릭되는 경우 이를 해결하는 방법에 대해서 알아보겠습니다.

 

가끔 RecyclerView 아이템을 빠르게 두번 클릭하면 새로운 Activity가 두개 열리는 경우가 있습니다.

또는 버튼을 빠르게 두번 클릭하면 해당 액션이 두번 발생 하기도 합니다.

 

이를 해결하기 위해서는 클릭할때 시간 제한을 두어야 합니다.

 

먼저 아래와 같이 OnSingleClickListener 파일을 하나 만들어 줍니다.

처음 클릭시 lastClickTime 변수에 시간을 할당해주고, 두번째 클릭 시 interval 시간보다 그 텀이 짧을 때는

return을 시켜줍니다.

[OnSingleClickListner.kt]

class OnSingleClickListener(
    private var interval: Int = 600,
    private var onSingleClick: (View) -> Unit
) : View.OnClickListener {

    private var lastClickTime: Long = 0

    override fun onClick(v: View) {
        val elapsedRealtime = SystemClock.elapsedRealtime()
        if ((elapsedRealtime - lastClickTime) < interval) {
            return
        }
        lastClickTime = elapsedRealtime
        onSingleClick(v)
    }

}

 

View 확장함수로 setOnSingleClickListener를 만들어줍니다. 어떤 View 에도 작동할 수 있도록 구현해 줍니다.

[Extensions.kt]

fun View.setOnSingleClickListener(onSingleClick: (View) -> Unit) {
    val oneClick = OnSingleClickListener {
        onSingleClick(it)
    }
    setOnClickListener(oneClick)
}

 

사용은 아래와 같이 하시면 됩니다.

[MainActivity.kt]

btnSave.setOnSingleClickListener {
	saveUser()
}

 

 

댓글