导航目标 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)
我正在尝试使用 标签在应用程序中添加多个模块的导航 我已经从 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)