본문 바로가기
Programming/Android(Kotlin & Java)

android backstack - kotlin

by yoon9i 2024. 1. 5.
private fun setBackPressedCallback() {
    val dispatcher = onBackPressedDispatcher

    val onBackPressedCallback: OnBackPressedCallback = object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            if (binding.바인딩된 웹뷰이름.canGoBack()) {
                binding.바인딩된 웹뷰이름.goBack()
                showToast("이전 페이지로 이동합니다.")
            } else {
                handleAppExit()
            }
        }
    }
    dispatcher.addCallback(this, onBackPressedCallback)
}

 

backstack 이 기존에 사용했을때는 backstack만 사용했는데 변경되어서 onBackPressedCallback 을 통해서 한번 backstack 하면 뒤로 가기가 되고 두번 backstack 시 종료되도록 구현할수있다.

 

추가로

 

하단은 두번 backstack 시 종료되는 코드이다.

private fun handleAppExit() {
    // 2초 안에 두번 backstack 시 앱 종료
    if (doubleBackToExitPressedOnce) {
        finish()
    } else {
        showToast("한 번 더 뒤로 가기를 누르면 종료됩니다.")
        doubleBackToExitPressedOnce = true
        Handler(Looper.myLooper()!!).postDelayed({ doubleBackToExitPressedOnce = false }, 2000)
    }
}

 

그전에 먼저

private var doubleBackToExitPressedOnce = false // backstack setting

 

backstack 에 대한 선언을 해주었다.

 

그리고 onCreate 안에

@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
	
		...

    setBackPressedCallback()

		...
}

 

setBackPressedCallback 을 선언해주었다.