[Android/Kotlin] 토스트 연속으로 하나만 띄우기 (Toast cancel)

SoyoungLee·2023년 3월 7일
0

안드로이드/코틀린

목록 보기
59/68
post-thumbnail

💌 [Android/Kotlin] 토스트 연속으로 하나만 띄우기 (Toast cancel)

관리자 모드에 진입할 떄 처럼 연속으로 클릭을 한 후 남은 횟수를 토스트로 띄워주고 일정 클릭횟수가 되면 다른 화면으로 전환 해주고 싶었다.

토스트를 연속으로 띄우면 처음에 뜬 토스트에 가려져 그다음 토스트가 느리게 떴다.

📌 클릭 횟수를 카운트해서 특정 코드를 실행하는 추상클래스 OnClickCountListener 생성

// 클릭 횟수를 카운트해서 특정 코드를 실행하는 Listener
abstract class OnClickCountListener(val mContext: Context) : View.OnClickListener {

    companion object {
        // 지정한 시간이내에 지정횟수만큼 클릭 시에만 카운트
        const val CLICK_INTERVAL:Long = 1000L
        const val CLICK_NUMBER = 5
    }

    private var lastClickedTime: Long = 0L // 새로 클릭한 시간
    var count = 0 // 클릭 카운트
    var mToast: Toast? = null

    abstract fun onCountClick(view: View)

    // CLICK_INTERVAL 시간 이내로 클릭했는 지
    private fun isClickedTime() = System.currentTimeMillis() - lastClickedTime

    override fun onClick(v: View) {

        // CLICK_INTERVAL 시간 이내로 안누르면 카운트 초기화
        if (isClickedTime() > CLICK_INTERVAL) {
            count = 0
        }

        lastClickedTime = System.currentTimeMillis()

        count += 1

        if (count < CLICK_NUMBER) {
            makeToast("진입 ${5-count} 단계 전입니다.")
        }

        if (count == CLICK_NUMBER) { // 5번 클릭 시에만 추상메소드 실행
            makeToast("실행 ")
            onCountClick(v)
            count = 0   // 카운트 초기화
        }
    }

    // 새로운 토스트가 띄워질 때 생성한 토스트 cancel 해준 뒤 재할당
    private fun makeToast(message: String) {
        mToast?.cancel()
        mToast = Toast.makeText(mContext, message, Toast.LENGTH_SHORT)
        mToast?.show()
    }

}

CLICK_INTERVAL : 지정한 시간
CLICK_NUMBER : 지정한 쵯수
나는 1초 내에 5번을 클릭시에만 해보겠다.
isClickedTime() : 지정한 시간 이내로 클릭했는지 체크.

CLICK_NUMBER 번 만큼 클릭 시에 실행할 추상 메소드 onCountClick 를 정의해줌.
count 변수로 카운트를 해준 후 5번 클릭시에 onCountClick 를 실행하고 카운트를 초기화해준다.

새로운 토스트가 띄워질때 겹치지않게 기존 생성한 토스트를 cancel 해준 뒤 재할당 해준다.

📌 뷰에 setOnClickListener 달아주기

btnToast.setOnClickListener(object : OnClickCountListener(mContext) {
	override fun onCountClick(view: View) {

		val intent = Intent(mContext, LoginActivity::class.java)
		startActivity(intent)

	}
})

💙 완성

  • 클릭 버튼을 1초이내에 5번 클릭하면 새로운 액티비티를 띄워준다

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글