TLI/Android
OnBackPressedCallback(true)
jaeseonyoo
2024. 8. 25. 23:50
개요
- 하단의 뒤로가기 버튼은 Activity에 있는 것이므로 Activity의 `onBackPressedDispatcher`에 callback을 추가해줘야 한다.
- `onBackPressedDispatcher.onBackPressed()`를 호출했을 때 addCallback된 callBack 메서드가 없으면 default callback이 실행된다.
- 추가 된 것이 있으면 그 것을 실행하는데 그 안에서 `onBackPressedDispatcher.onBackPressed()`을 호출하면 무한루프에 빠지게 된다.
- `OnBackPressedCallback(true)`
- isEnabled = true 라는 의미
- true인 callback 메서드만 실행이 가능하다.
- false로 바꿔주면 다시 호출되지 않는다.
private val back_pressed_call_back = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// this.handleOnBackPressed()
// val contactListFragment = requireActivity().supportFragmentManager.fragments[0]
backCount++
Log.d("ContactDetailFragment", "click back button")
if(backCount == 7) {
isEnabled = false
}
requireActivity().onBackPressedDispatcher.onBackPressed()
// if(isEnabled) {
// isEnabled = false
// requireActivity().onBackPressedDispatcher.onBackPressed()
// }
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// ...
requireActivity().onBackPressedDispatcher.addCallback(requireActivity(), back_pressed_call_back)
}
}