📱 Android

[Android] onBackPressedDispatcher 뒤로가기 제어하기 (ft. DialogFragment)

콩드로이드 2024. 9. 19. 21:02

Android API 33에서 onBackPressed() 메서드가 deprecated 되면서 onBackPressedDispatcher가 생겼습니다 

Activity의 생명주기와 함께 작동하고, 해당 callback을 선언해서 사용하면 됩니다 

 


 

DialogFragment에서 back 버튼을 눌러도 다이얼로그가 사라지지 않게 하려면 어떻게 해야할까요?

1. onBackPressedDispatcher 콜백 추가

2. handleOnBackPressed를 override해서 아무 동작도 하지 않도록 설정

 

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

       
        requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                // 아무 동작도 하지 않음
            }
        })
    }

 

object : OnBackPressedCallback(true)를 사용하면 백버튼이 호출됐을 때 handleOnBackPressed()내의 동작을 하게금 뺏어옵니다 (백 버튼의 기본 동작을 가로챕니다)

 

 

하지만 위와 같이 설정해도, 백버튼을 눌렀을 때 다이얼로그가 닫히는 경우가 있습니다 

이럴땐, isCancelable 을 확인해야합니다 

 

isCancelable을 false로 

기본적으로 DialogFragment의 isCancelable은 true로 설정되어있는데, 이게 다이얼로그를 닫는 이유가 될 수 있습니다 

따라서 onCreate 부분에 아래와 같이 추가해줍니다! 

isCancelable = false