Почему в Dialog нет NavController [отсутствует]? - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь использовать последнее обновление компонента Nav в моем приложении

где я могу добавить диалог (BottomSheetDialogFragment) в моем nav graph

nav_version = "2.1.0-alpha05"

Часть кода из моего nav_graph:

    <dialog
        android:id="@+id/settingFragment"
        android:name="com.andor.navigate.notepad.listing.fragment.SettingFragment"
        tools:layout="@layout/fragment_setting">
        <action
            android:id="@+id/action_settingFragment_to_confirmationFragment"
            app:destination="@id/confirmationFragment" />
    </dialog>
    <dialog
        android:id="@+id/confirmationFragment"
        android:name="com.andor.navigate.notepad.ConfirmationFragment"
        tools:layout="@layout/fragment_confirmation" />

Во фрагменте моей настройки у меня есть кнопка (logout_btn) для запуска действия: action_settingFragment_to_confirmationFragment

код в OnActivityCreated фрагмента Сеттинга:

    logout_btn.setOnClickListener {
       Navigation.findNavController(view!!).navigate(R.id.action_settingFragment_to_confirmationFragment)
    } 

Когда я нажимаю на кнопку, появляется исключение времени выполнения:

java.lang.IllegalStateException: просмотр androidx.constraintlayout.widget.ConstraintLayout {550ae09 V.E ...... ........ 1,1-719,526} не имеет установленного NavController на androidx.navigation.Navigation.findNavController (Navigation.java:84) в com.andor.navigate.notepad.listing.fragment.SettingFragment $ onActivityCreated $ 2.onClick (SettingFragment.kt: 56) на android.view.View.performClick (View.java:7352) на android.view.View.performClickInternal (View.java:7318) на android.view.View.access $ 3200 (View.java:846) на android.view.View $ PerformClick.run (View.java:27800) на android.os.Handler.handleCallback (Handler.java:873) на android.os.Handler.dispatchMessage (Handler.java:99) на android.os.Looper.loop (Looper.java:214) на android.app.ActivityThread.main (ActivityThread.java:7045) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:493) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:965)

Моя цель - открыть диалог из другого диалога, но по какой-то причине в моем диалоге нет (отсутствует) NavController.

Я уже ссылался на источник код

1 Ответ

3 голосов
/ 18 июня 2019

A DialogFragment работает в совершенно отдельном окне, которое не находится в той же иерархии представлений, что и ваша NavController.

Вы должны использовать NavHostFragment.findNavController(this) (где this - ваш DialogFragment)) или расширение Kotlin findNavController(), если вы используете зависимость fragment-ktx, которая поднимается вверх по иерархии фрагмент для найдите свой NavController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...