【问题标题】:Why Dialog does not have a NavController [Missing]?为什么 Dialog 没有 NavController [Missing]?
【发布时间】:2019-06-18 10:52:22
【问题描述】:

我正在尝试在我的应用程序中使用最新更新的导航组件

我可以在我的nav graph 中添加对话框(BottomSheetDialogFragment

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。

我已经参考了来源code

【问题讨论】:

    标签: android kotlin androidx android-navigation android-architecture-navigation


    【解决方案1】:

    DialogFragment 在一个完全独立的窗口中运行,该窗口与您的NavController 不在同一视图层次结构中。

    你应该使用NavHostFragment.findNavController(this)(其中this是你的DialogFragment)或Kotlin扩展findNavController()如果你使用的是fragment-ktx依赖,它沿着fragment层次结构向上走找到你的 NavController。

    【讨论】:

    • 我尝试在上面使用并面对issuetracker.google.com/issues/134089818 应用程序正在崩溃将作为一个单独的问题发布。
    • 在对话到对话动作的情况下没有问题,而在对话到片段动作崩溃的情况下发生
    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多