0

我正在使用底部导航。从菜单A的画面到另一个画面的转换,而不是从菜单A到另一个的画面转换,如下。

菜单 A(片段)-> B 屏幕(片段)-> C 屏幕(片段)-> B 屏幕(片段)

我连接了这些屏幕转换nav_graph

我正在使用BottomNavigation. 从画面的画面menu A到另一画面的转变,而不是从菜单A到另一画面的画面转变如下。

菜单 A(片段)-> B 屏幕(片段)-> C 屏幕(片段)-> D 屏幕(片段)

我连接了这些屏幕转换nav_graph

但是,从D到的画面转换C没有连接,但可以使用 切换画面view.findNavController.navigate()

我认为如果不连接到nav_graph.

这怎么可能?

更新

nav_graph.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/nav_graph"
    app:startDestination="@id/calendar">
    <fragment
        android:id="@+id/calendar"
        android:name="com.example.writeweight.fragment.CalendarFragment"
        android:label="fragment_calendar"
        tools:layout="@layout/fragment_calendar" >
    </fragment>
    <fragment
        android:id="@+id/list"
        android:name="com.example.writeweight.fragment.WorkoutListFragment"
        android:label="fragment_workout_list"
        tools:layout="@layout/fragment_workout_list" />
    <!-- menu A fragment -->
    <fragment
        android:id="@+id/write_home"
        android:name="com.example.writeweight.fragment.WriteRoutineHomeFragment"
        android:label="fragment_write_routine_home"
        tools:layout="@layout/fragment_write_routine_home" >
        <action
            android:id="@+id/action_write_home_to_bodyPartDialog"
            app:destination="@id/bodyPartDialog" />
    </fragment>
    
    <!-- B screen -->
    <dialog
        android:id="@+id/bodyPartDialog"
        android:name="com.example.writeweight.fragment.BodyPartDialogFragment"
        android:label="BodyPartDialogFragment"
        tools:layout="@layout/fragment_body_part_dialog">
        <action
            android:id="@+id/action_bodyPartDialog_to_write"
            app:destination="@id/write"/>
    </dialog>
    
    <!-- C screen -->
    <fragment
        android:id="@+id/write"
        android:name="com.example.writeweight.fragment.WritingRoutineFragment"
        android:label="WritingRoutineFragment"
        tools:layout="@layout/fragment_writing_routine">
        <action
            android:id="@+id/action_write_to_bodyPartDialog"
            app:destination="@id/bodyPartDialog" />
        <argument
            android:name="title"
            app:argType="string"
            android:defaultValue="" />
    </fragment>
    
    <!-- D screen   -->
    <fragment
        android:id="@+id/workoutListTabFragment"
        android:name="com.example.writeweight.fragment.WorkoutListTabFragment"
        android:label="fragment_workout_list_tab"
        tools:layout="@layout/fragment_workout_list_tab" />
</navigation>
4

1 回答 1

2

根据使用 ID 文档导航

navigate(int)获取动作或目的地的资源 ID。

因此,既可以直接导航到任何目的地(通过使用目的地的 ID),也可以支持通过操作进行导航。

文档接着说:

注意:使用 ID 导航时,我们强烈建议尽可能使用操作。操作在您的导航图中提供附加信息,直观地显示您的目的地如何相互连接。通过创建操作,您可以将资源 ID 替换为Safe Args 生成的操作,从而提供额外的编译时安全性。通过使用动作,您还可以为目的地之间的过渡设置动画。有关详细信息,请参阅在目标之间设置动画过渡

于 2021-07-02T17:08:30.070 回答