nav_graph是否可以在不连接的情况下移动屏幕?
Is it possible to move the screen without connecting in nav_graph?
我正在使用 BottomNavigation。
从菜单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>
根据 Navigate using ID documentation:
navigate(int) takes the resource ID of either an action or a destination.
因此,既可以直接导航到任何目的地(通过使用目的地的 ID),也可以支持通过操作导航。
文档接着说:
Note: When navigating using IDs, we strongly recommend using actions where possible. Actions provide additional information in your navigation graph, visually showing how your destinations connect to each other. By creating actions, you can replace resource IDs with Safe Args-generated operations, providing additional compile-time safety. By using an action, you can also animate transitions between the destinations. For more information, see Animate transitions between destinations.
我正在使用 BottomNavigation。 从菜单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>
根据 Navigate using ID documentation:
navigate(int) takes the resource ID of either an action or a destination.
因此,既可以直接导航到任何目的地(通过使用目的地的 ID),也可以支持通过操作导航。
文档接着说:
Note: When navigating using IDs, we strongly recommend using actions where possible. Actions provide additional information in your navigation graph, visually showing how your destinations connect to each other. By creating actions, you can replace resource IDs with Safe Args-generated operations, providing additional compile-time safety. By using an action, you can also animate transitions between the destinations. For more information, see Animate transitions between destinations.