[study]Android/Android(Kotlin & Java)
android backstack - kotlin
yoon9i
2024. 1. 5. 14:30
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 을 선언해주었다.