Fragment 에서 뒤로가기 키를 눌렀을 때 어떤 작업을 처리하고 싶을 땐 어떻게 해야할까?
Activity의 OnBackPressed() 와 같은 콜백 메소드를 Fragment 에서는 구현할 수 없을까?
AndroidX 패키지에서 제공하는 OnBackPressedDispatcher() 를 사용하면 가능하다.
사용시 주의해야할 점은 생명주기를 잘 관리하면서 사용해야한다!
private lateinit var callback: OnBackPressedCallback
위와 같이 콜백을 전역벽수로 선언
override fun onAttach(context: Context) {
super.onAttach(context)
callback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
(activity as MainActivity).mainFragmentReplace((activity as MainActivity).previousFragment)
}
}
requireActivity().onBackPressedDispatcher.addCallback(this, callback)
}
override fun onDetach() {
(activity as MainActivity).bottomNavigationEndMotion()
(activity as MainActivity).topTabEndMotion()
callback.remove()
super.onDetach()
}
onAttach() 에서 콜백을 등록해주고, onDetach() 에서 콜백을 제거해주면 된다.
프로젝트 진행 중 Fragment 에서 뒤로가기키를 눌렀을 때, 이전 프래그먼트로 전환해야할 일이 생겨서 찾아봤다.