안드로이드/이론

[ 안드로이드 ] Fragment에서 onBackPressed(뒤로가기 이벤트) 처리하기

dongx._.2 2023. 9. 9. 20:56

 

Fragment 위에 또 다른 화면을 띄워야 했다. 새로 띄울 화면은 배경이 반투명으로, 기존의 화면이 비쳐 보여야했기 때문에 새로운 Fragment를 띄우는 것이 아닌 View로 덮어 씌우는 방식을 선택 했다.

 

이런 식으로 구현하니 뒤로가기 처리가 문제가 되었는데, onBackPressedDispatcher를 이용해서 간단히 해결할 수 있었다.

 

onBackPressedCallback 정의

    private val onBackPressedCallback = object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            // 특정 뷰가 보일 떈 직접처리
            if(bind.clSelectAssessment.isVisible){
                hideSelectAssessment()
            } else { 
                // 특정 뷰가 보이지 않을 땐 기존 동작으로 처리
                isEnabled = false
                requireActivity().onBackPressedDispatcher.onBackPressed()
                isEnabled = true
            }
        }
    }

 

onBackPressedDispatcher에 callback 등록

    private fun initBackPressed(){
    	// 특정 Fragment에서만 뒤로가기 이벤트를 처리해야하는 경우
        // addCallback 메소드의 인자로 owner를 전달할 수 있다.
        requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
    }