본문 바로가기

안드로이드

activity와 fragment에서 백버튼 처리하기

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() 무조건 호출해야 기능을한다.