안녕하세요~ 챠니입니다! :)
오늘은 Android의 뒤로가기 기능은 커스텀하는 "OnBackPressedCallback"에 대해서 알아보도록 하겠습니다!
onBackPressedDispatcher란?
onBackPressedDispatcher는 AndroidX 라이브러리에서 제공하는 기능으로, Activity와 Fragment 모두에서 뒤로가기 버튼 이벤트를 보다 세밀하게 처리할 수 있도록 지원합니다. 기존의 onBackPressed() 메서드를 단순히 오버라이드하는 방식과 달리, onBackPressedDispatcher를 사용하면 여러 컴포넌트가 동시에 이벤트를 처리할 수 있어 복잡한 화면 전환이나 Fragment 간의 이벤트 처리에 유리합니다. 이 방식은 앱의 생명주기와 밀접하게 연동되어, 화면 전환이나 백스택 관리 측면에서 장점을 가져갈 수 있습니다.
자 그럼 긴말 필요없이, 코드로 보여드리겠습니다.
onBackPressedDispatcher 기본적인 사용방법
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
//뒤로가기 Callback 등록
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
//뒤로가기 Callback 호출시, 로직 처리
...
}
}
기본구성은 다음과 같습니다.
예전에는 onBackPressed()를 override해서 사용하면 끝이였는데요, 이제는 Callback을 따로 등록해서 처리를 할 수 있습니다.
하지만 여기서 끝이 아니죠??
여러분들은 보통 이것을 찾으러 오셨을것이라 생각합니다.
바로.. 바로...
뒤로가기 두번클릭시 종료는 그래서 어떻게 구현을 하는가??
뒤로가기 두번 연속 클릭시 앱 종료 - onBackPressedDispatcher 사용해서
로직은 다음과 같습습니다~
System.currentTimeMillis를 이용해서 현재시간을 따로 변수에 담아두고, 뒤로가기 버튼이 다시 클릭 되었을때의 시간을 측정하여 특정시간(ex. 2초)안에 속한 값이면 앱을 종료하는 로직을 구성하면 되겠습니다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
//뒤로가기 Callback 등록
onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}
var mBackWait:Long = 0
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
//뒤로가기 두번 클릭시 앱 종료
if (System.currentTimeMillis() - mBackWait >= 2000) {
mBackWait = System.currentTimeMillis()
Toast.makeText(applicationContext, "뒤로가기 버튼을 한번 더 누르면 종료됩니다.", Toast.LENGTH_SHORT).show()
} else {
finishAffinity()
}
}
}
너무 쉽죠?
끝!
질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!
응원의 댓글은 저에게 큰 힘이 된답니다! :)
즐거운 하루되세요!
깃허브 보러 놀러오세요 👇 (맞팔환영)
https://github.com/younminchan
younminchan - Overview
•🇰🇷/👨🏻💻/🖥/⚽️/🎤/🥁/🏃♂️/🚴♂️/🏄🏻♂️/🤟 •TechBlog⬇️ •안드로이드 4년차 개발자 https://minchanyoun.tistory.com - younminchan
github.com
'🖥 Programming > 📱 Android (Kotlin)' 카테고리의 다른 글
[Android] 안드로이드 라이브러리(AAR) 만들기 (0) | 2025.02.04 |
---|---|
[Android][kotlin] 앱 하단바 색상 변경방법 (1) | 2024.12.18 |
[Android] Duplicate class found.. / android.support, AndroidX 대응 (2) | 2024.11.20 |
.gitignore 작동안할때 (0) | 2024.10.18 |
[해결방법] 개발자 프로필과 모든 앱이 2024년 9월 10일에 Google Play에서 삭제됩니다. (14) | 2024.07.25 |
[Android][kotlin] 레이아웃 StausBar(상단), NavigtationBar(하단) 전체 화면 (0) | 2024.06.24 |
[Android][kotlin] CustomDialog 만들기 (2) | 2024.06.11 |
[Android] Android Gradle plugin requires Java 17 to run. You are currently using Java 11. 해결방법 (2) | 2024.01.08 |