fragment에서 onBackPressed 이벤트를 받아오기 위해 사용
in Fragment:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activity?.onBackPressedDispatcher?.addCallback(object :OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// onBackPressed() 호출시 동작
}
})
}
...인데 가끔 잘 동작을 안한다
삽질하다보니 activity에서 onBackPressed를 오버라이딩 하면 저 dispatcher가 동작을 안하는 문제가 있음
거기다 fragment 열어둔 채로 다른 화면 (퍼미션 체크라던가) 갔다오면 아래처럼 정상적으로 동작하지 않는 문제 발생
Fragment [Fragment name] not associated with a fragment manager.
onBackPressedDispatcher에 owner 추가해주고
activity에서 onBackPressed() 함수에 onBackPressedDispatcher.hasEnabledCallbacks() 조건으로 체크하니까 해결됐다
in fragment:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// calback에 owner(this) 추가
activity?.onBackPressedDispatcher?.addCallback(this, object :OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
// onBackPressed() 호출시 동작
}
})
}
in Activity:
override fun onBackPressed() {
if (onBackPressedDispatcher.hasEnabledCallbacks()) {
onBackPressedDispatcher.onBackPressed()
return
}
// else case
super.onBackPressed()
}