我正在使用底部导航。 从菜单 A 的屏幕到另一个屏幕的转换,而不是从菜单 A 到另一个屏幕的转换,如下所示。
menu A(fragment) -> B screen(fragment) -> C screen(fragment) -> B screen(fragment)
我在 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>
答案 0 :(得分:2)
根据Navigate using ID documentation:
<块引用>navigate(int) 获取操作或目标的资源 ID。
因此,可以直接导航到任何目的地(通过使用目的地的 ID),也支持通过操作进行导航。
文档继续说:
<块引用>注意:使用 ID 导航时,我们强烈建议您尽可能使用操作。操作在您的导航图中提供额外信息,直观地显示您的目的地如何相互连接。通过创建操作,您可以用 Safe Args-generated operations 替换资源 ID,从而提供额外的编译时安全性。通过使用动作,您还可以为目标之间的过渡设置动画。有关详细信息,请参阅 Animate transitions between destinations。