chacha's

🔀 Dialog에서 findNavController 접근 못 하는 문제 본문

Android/TIL

🔀 Dialog에서 findNavController 접근 못 하는 문제

Cha_Cha 2021. 6. 16. 19:45
 Why Dialog does not have a NavController [Missing]? - stack overflow
 를 참고하여 작성한 글입니다.
    binding.repeatSettingOkBtn.setOnClickListener { view ->
        view.findNavController().navigate(
            RepeatSettingDialogFragmentDirections.actionRepeatSettingDialogToRepeatSchedule(repeatInfo))
    }

DialogFragment에서 navigation을 이용하여 이동하려고 NavController에 접근하면 아래와 같은 에러를 만났습니다. 

java.lang.IllegalStateException: View com.google.android.material.button.MaterialButton{...} does not have a NavController set
        at androidx.navigation.Navigation.findNavController(Navigation.java:84)
        at androidx.navigation.ViewKt.findNavController(View.kt:28)

🔻 DialogFragment는 NavController의 뷰 계층 구조와 완전히 분리된 창에서 동작하기 때문에 NavHostFragment.findNavController(this)을 사용하여 접근해야 합니다. 여기서 this DialogFragment() 입니다.

binding.repeatSettingOkBtn.setOnClickListener { view ->
    NavHostFragment.findNavController(this).navigate(
        RepeatSettingDialogFragmentDirections.actionRepeatSettingDialogToRepeatSchedule(repeatInfo))
}

 

Comments