1. 将导航组件添加到项目中
我们已经在项目build.gradle 文件中为您添加了 ext 变量,该文件显示了我们将使用的导航组件的版本。我们已经针对所示版本进行了测试,但您可以在developer.android.com 上的此页面上查看哪个版本是最新的(在新选项卡中打开):
buildscript {
ext {
... version_navigation = '1.0.0' ...
}
在App build.gradle 文件中,添加导航片段 ktx 和导航 UI ktx 的依赖项。
dependencies { ...
implementation "android.arch.navigation:navigation-fragment-ktx:$version_navigation"
implementation "android.arch.navigation:navigation-ui-ktx:$version_navigation"
}
2. 将导航图添加到项目中
在“项目”窗口中,右键单击 res 目录并选择“新建”>“Android 资源文件”。将出现“新建资源”对话框。
选择导航作为资源类型,并为其指定导航的文件名。确保它没有限定符。在 res 下的新导航目录中选择 navigation.xml 文件,并确保选择了设计选项卡。
3. 将 Activity 布局中的标题片段替换为导航主机片段
转到 Activity_main 布局。将现有标题片段的类名称更改为 androidx.navigation.fragment.NavHostFragment。将 ID 更改为 myNavHostFragment。它需要知道要使用哪个导航图资源,因此添加 app:navGraph 属性并使其指向导航图资源 - @navigation/navigation。最后设置defaultNavHost = true,表示这个导航主机会拦截系统后退键。
<!-- The NavHostFragment within the activity_main layout -->
<fragment android:id="@+id/myNavHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent" android:layout_height="match_parent"
app:navGraph="@navigation/navigation" app:defaultNavHost="true"
/>
4. 将标题和游戏片段添加到导航图
在导航编辑器中,单击添加按钮。片段和活动的列表将会下拉。首先添加fragment_title,因为它是起始目的地。 (您将看到它将自动设置为图表的开始目标。)接下来,添加fragment_game。
<!-- The complete game fragment within the navigation XML,
complete with tools:layout. -->
<fragment android:id="@+id/gameFragment"
android:name="com.example.android.navigation.GameFragment"
android:label="GameFragment"
tools:layout="@layout/fragment_game" />
5. 用动作连接标题和游戏片段
首先将鼠标悬停在 titleFragment 上。您将在片段视图的右侧看到一个圆形连接点。单击连接点并将其拖动到 gameFragment 以添加连接两个 Fragment 的 Action。
6.按下播放按钮时进行导航
返回到 TitleFragment Kotlin 代码中的 onCreateView。绑定类已公开,因此您只需使用新的匿名函数(也称为 lambda)调用 binding.playButton.setOnClickListener 即可。在我们的 lambda 中,使用 view.findNavcontroller 获取导航主机片段的导航控制器。然后,通过调用 navController 使用 titleFragment 到 gameFragment 操作进行导航(R.id.action_titleFragment_to_gameFragment)
<!-- The complete game fragment within the navigation XML, complete with tools:layout. --> <fragment android:id="@+id/gameFragment"
android:name="com.example.android.navigation.GameFragment"
android:label="GameFragment"
tools:layout="@layout/fragment_game" />
您可能还想做一件事。 Navigation 可以为我们创建 onClick 监听器。我们可以用 Navigation.createNavigateOnClickListener 调用替换匿名函数。
//The complete onClickListener with Navigation using createNavigateOnClickListener
binding.playButton.setOnClickListener(
Navigation.createNavigateOnClickListener(R.id.action_titleFragment_to_