Android是否可以有多个nav_graph文件?

时间:2020-04-24 07:45:29

标签: android kotlin android-jetpack android-jetpack-navigation

所以我使用的是Jetpack navigation,碎片的数量一直在增长。

我们可以按照本文档中的说明在不同的导航图中分隔片段

jetpack nav graph docs

然后,我尝试将不同的导航图放置在不同的文件中,因为这会使文件看起来更有条理和可读性,但是当我尝试导航到不同的nav_graph文件时,出现以下错误。

nav_graph_start.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/nav_graph_start"
    app:startDestination="@id/splashScreen"
    tools:ignore="UnusedNavigation">

    <fragment
        android:id="@+id/splashScreen"
        android:name="com.timetoface.android.splash.SplashFragment"
        android:label="Login Fragment"
        tools:layout="@layout/fragment_splash">

        <action
            android:id="@+id/action_splash_to_login"
            app:destination="@id/nav_graph_auth"
            />
        <action
            android:id="@+id/action_splash_to_home"
            app:destination="@id/nav_graph_home"
            />
    </fragment>
</navigation>

nav_graph_auth.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/nav_graph_auth"
    app:startDestination="@id/emailLoginScreen"
    tools:ignore="UnusedNavigation">
................................
</navigation>

nav_graph_home.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/nav_graph_home"
    app:startDestination="@id/emailLoginScreen"
    tools:ignore="UnusedNavigation">
................................
</navigation>

导航目标com.app.android:id/nav_graph_home 从动作com.app.android:id/action_splash_to_home引用 NavController未知

所以

是否尚不支持m 个通用导航图文件

我错过了我应该改变的东西吗?

1 个答案:

答案 0 :(得分:3)

首先可以使用include。看看 this

示例:first_graph.xml

<include app:graph="@navigation/second_graph" />

然后将操作设置为包含图的ID

 <action
        android:id="@+id/action_fragment_to_second_graph"
        app:destination="@id/second_graph" />

您还可以使用扩展名来使用多个合并的图形。

看看 this

实际上,每个活动都应具有自己的导航图。