导航图 hos in multi activity

Navigation graph hos in multi activity

我是使用导航组件的新手,我有 2 个 activity 每个都有 3 个片段,我应该为每个 activity 创建一个导航主机图,或者有一种方法可以只使用一个导航图进行 2 项活动?

您可以使用 Intent 从 Activity 1 移动到 Activity 2。

每个 Activity 都需要自己的 NavGraph 来承载 3 个片段并在其中导航。因此,您将使用 Navigation Component 在主机 Activity.

中从一个片段移动到另一个片段

如果您的架构允许,您也可以决定只使用一个 Activity。

For Navigation components with multiple-activities,您不应使用 Intents 启动活动,相反,您需要将活动作为目的地添加到 nav_graph

Should I create for each activity a navigation host graph or there are a way to use only one nav graph for 2 activities ?

是的,对于 n 个活动,您应该有 n 个或更少的导航图(以防您需要进行一些不涉及导航的活动,如正常活动)

因此,在您的情况下,您有 2 个活动,那么您应该有 nav_grap1 & nav_grap2。

假设您需要从 activity1、fragment1 移动到 activity2,那么您需要做的是:

  • nav_graph1 中添加 <activity2> 作为目的地。
  • nav_graph1 中从 fragment1 到 activity2
  • 创建一个动作

activity1 的导航图应该类似于:

<?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/fragment1_1">

    <fragment
        android:id="@+id/fragment1_1"
        android:name="com.example.android.xx.Fragment1_1"
        android:label="Fragment1_1" >

        <action
            android:id="@+id/action_fragment1_1_to_secondActivity"
            app:destination="@id/secondActivity" />

    </fragment>

    <fragment
        android:id="@+id/fragment1_2"
        android:name="com.example.android.xx.Fragment1_2"
        android:label="Fragment1_2" />

    <activity
        android:id="@+id/secondActivity"
        android:name="com.example.android.xx.SecondActivity"
        android:label="SecondActivity" />

</navigation>
  • 每当您想移动到 activity2 时,只需使用 navigationController 的不同 navigate() 方法即可;例如:
findNavController().navigate(R.id.action_fragment1_1_to_secondActivity)

更多信息check documentation, and check