안드로이드
activity와 fragment에서 백버튼 처리하기
강한 맷돼지
2022. 2. 1. 04:33
Activity
액티비티 내에서는 그냥 onbackpressed를 오버라이딩 해버리면된다
override fun onBackPressed() {
super.onBackPressed()
//하고싶은거 하면됨
}
fragment
백버튼을 커스텀해서 사용하고싶을때 onBackPressed를 오버라이딩 해서 사용한다.
근데 프래그먼트에는 이런 콜백메서드가 없다(액티비티에만 있다)
그래서 backpress이벤트에 대처하기위해
Androidx 패키지의 OnBackPressedDispatcher() 를 사용한다
사용법을 보자면
class SetPurposeFragment : BaseFragment<FragmentSetPurposeBinding>(R.layout.fragment_set_purpose) {
private lateinit var callback: OnBackPressedCallback
override fun onAttach(context: Context) {
super.onAttach(context)
callback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
//여기에 백버튼 눌렀을때 적용될것 작성
}
}
requireActivity().onBackPressedDispatcher.addCallback(this, callback)
}
override fun onDetach() {
super.onDetach()
callback.remove()
}
}
이런식으로 작성해서 사용하면된다
근데 난 원래의 백버튼의 기능도 사용하고싶은경우가 있다고 생각하는데
super.onBackPressed이런건 아예없고
requireActivity().onBackPressed하면 스택 오버플로우가 나서 기존기능을 다시 활용하는 방법은 못찾았다
문다빈과 이야기한 결과 그냥 백으로 넘기는거 다 코드로 구현해서 넣어주자
그리고 한가지 주의점은 이거는 액티비티에 onBackPressed에 편입된다는 개념으로 생각하면되서
만약에 activity에서 onBackPressed 함수를 오버라이딩 하더라고
super.onBackPressed() 무조건 호출해야 기능을한다.