从2.1.0版本开始,导航组件中就支持DialogFragment。
我正在遵循官方指南。创建目的地
但在任何新的版本上,我都没有这样的选项。我目前使用的是2.2.2,但也尝试过alpha和beta版本。当我手动写的时候,我的导航.xml是这样的。
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navigation"
app:startDestination="@id/fragmentTitle">
<fragment
android:id="@+id/fragmentTitle"
android:name="com.kabiskac.test.title.TitleFragment"
android:label="Welcome"
tools:layout="@layout/fragment_title">
<action
android:id="@+id/action_fragmentTitle_to_askPinDialogFragment"
app:destination="@+id/askPinDialogFragment"/>
</fragment>
<dialog
android:id="@+id/askPinDialogFragment"
android:name="com.kabiskac.test.dialogs.AskPinDialogFragment">
</dialog>
</navigation>
但在XML编辑器中却这样写
Element dialog is not allowed here
而且我得到了这个运行时错误。
...
Caused by: java.lang.IllegalStateException: Could not find Navigator with name "dialog". You must call NavController.addNavigator() for each navigation type.
我使用的是Android Studio 4.0和Gradle 4.0.0.0.
我到底做错了什么?
我在我的gradle文件中找到了这个选项。
dependencies {
def nav_version = "2.2.2"
// Kotlin
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
}
我添加了java库,解决了这个问题。
// Java language implementation
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"