导航目标 com.example.multimodulepoc:id/navigation_home 不是此 NavGraph 的直接子项

Navigation destination com.example.multimodulepoc:id/navigation_home is not a direct child of this NavGraph

我正在尝试使用 标签在应用程序中添加多个模块的导航 我已经从 home 模块提供了我的 startDestination。当我只有一个带有 startDestination 的 <include> 标签时,它工作正常。当我添加多个模块导航时,应用程序崩溃并显示以下错误消息。我在 SO 中找不到有用的链接。请帮助我们解决这个问题。提前致谢。

Caused by: java.lang.IllegalArgumentException: navigation destination com.example.multimodulepoc:id/navigation_home is not a direct child of this NavGraph 

下面是我的导航xml和依赖

app build.gradle.

dependencies {
    ....
    implementation project( ':home')
    implementation project( ':Dashobard')
    ....
}

应用级导航xml。

<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/mobile_navigation"
    app:startDestination="@id/navigation_home">

    <include app:graph="@navigation/home_navigation" />
    <include app:graph="@navigation/dashboard_navigation" />

</navigation>

主页模块导航

<?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/home_navigation"
    app:startDestination="@+id/navigation_home">
    <fragment
        android:id="@+id/navigation_home"
        android:name="com.ns.mpos.home.home.HomeFragment"
        android:label="@string/title_home"
        tools:layout="@layout/fragment_home" />
</navigation>

仪表板导航

<?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/dashboard_navigation"
    app:startDestination="@+id/navigation_dashboard">

    <fragment
        android:id="@+id/navigation_dashboard"
        android:name="com.ns.mpos.dashobard.dashboard.DashboardFragment"
        android:label="@string/title_dashboard"
        tools:layout="@layout/fragment_dashboard" />

</navigation>

您的主页模块图有:

<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/home_navigation"

所以您的主页图的 ID 是 @id/home_navigation,但这不是您设置为应用级别图的 startDestination 的 ID,因此出现错误消息:

navigation destination com.example.multimodulepoc:id/navigation_home is not a direct child of this NavGraph 

'direct child' 是这里最重要的部分:您的应用程序级图不知道主图内的目的地,只知道图本身。因此,您需要确保您的应用级别图表的 startDestination 与您的主页图表的 android:id 实际匹配:

<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/mobile_navigation"
    app:startDestination="@id/home_navigation">

    <include app:graph="@navigation/home_navigation" />
    <include app:graph="@navigation/dashboard_navigation" />

</navigation>

如果尝试导航另一个模块导航,我遇到了类似的崩溃。

java.lang.IllegalArgumentException: Navigation action/destination com.example.multimodulepoc:id/navigation_dashboard cannot be found from the current destination Destination(com.example.multimodulepoc:id/navigation_home) label=Home class=com.example.home.home.HomeFragment 

在@ianhanniballake 评论的帮助下,使用以下代码修复了崩溃问题,帮助我解决了崩溃问题。

findNavController().setGraph(R.navigation.dashboard_navigation)
findNavController().navigate(R.id.navigation_dashboard)