练习:添加导航

1. 开始之前

恭喜!您使用 Jetpack Compose 构建了您的第一个应用,并在多个屏幕之间进行了导航。现在您已准备好将学到的知识付诸实践。

本练习重点介绍创建必要的组件,以向具有多个屏幕可组合项的应用添加导航。此材料扩展了您在 使用 Compose 在屏幕之间导航 codelab 中学到的内容,并允许您将这些知识应用于向现有应用添加导航。

解决方案代码在最后提供,但在查看答案之前,请尝试解决练习。请将解决方案视为实现应用的一种方法。

先决条件

您需要什么

  • 一台连接互联网的电脑以及已安装的 Android Studio
  • Lunch Tray 应用的起始代码

您将构建什么

在这些练习题中,您将通过添加导航来完成 Lunch Tray 应用。Lunch Tray 应用是一个交互式午餐订购应用,包含三个屏幕。每个屏幕代表您可以从中选择的三种菜单项类型之一:主菜、配菜和佐餐。

练习题分为几个部分,您将在其中执行以下操作

  • 为用户导航的每个屏幕创建引用。
  • 初始化导航控制器。
  • 创建顶部栏,显示屏幕标题和导航按钮(如果适用)。
  • 配置导航宿主,确定从一个屏幕到下一个屏幕的路由。

最终的应用流程如下所示

6e7d1c4638c64988.png

2. 设置

下载起始代码

  1. 在 Android Studio 中,打开 basic-android-kotlin-compose-training-lunch-tray 文件夹。
  2. 在 Android Studio 中打开 Lunch Tray 应用代码。

3. 屏幕枚举

在本节中,您将创建一个 enum 类,以保存以下每个 Lunch Tray 应用屏幕的常量

  • 开始
  • 主菜菜单
  • 配菜菜单
  • 佐餐菜单
  • 结账

每个屏幕都应具有一个关联的标题,形式为字符串。这些字符串作为资源在起始代码中提供。

4. 导航控制器和初始化

在本节中,您将创建导航控制器。您还将初始化后栈条目和当前屏幕的名称。

当前屏幕的名称应为初始屏幕的名称,或者如果目标屏幕当前存在,则为目标屏幕的名称。

5. AppBar

Scaffold 可组合项的 AppBar 创建一个可组合项。AppBar 应显示当前屏幕的标题。如果可以进行向后导航,则相应的向后导航按钮也应出现在屏幕上。从“开始”屏幕无法进行向后导航。

最终屏幕截图

以下屏幕截图显示了 AppBar 的两个示例:一个没有向上按钮,另一个有向上按钮。

89162a2f5b189ffc.png 4a908f1153e7773e.png

UI 规范

使用 Icons.Filled.ArrowBack 图标作为向后导航按钮。

6. 导航宿主

在本练习中,您将使用导航宿主构建 Lunch Tray 应用的导航路由。

下图显示了 Lunch Tray 应用的导航流程

61df3b2ee856325a.png

  • “开始订购”按钮(在“开始”屏幕上)导航到“主菜菜单”屏幕。
  • “下一步”按钮(在“主菜菜单”屏幕上)导航到“配菜菜单”屏幕。
  • “下一步”按钮(在“配菜菜单”屏幕上)导航到“佐餐菜单”屏幕。
  • “下一步”按钮(在“佐餐菜单”屏幕上)导航到“结账”屏幕。
  • “提交”按钮(在“结账”屏幕上)导航到“开始”屏幕。
  • “取消”按钮(在任何屏幕上)导航回“开始”屏幕。

最终结果

完成实现后,您的应用导航流程应如下所示

edb246dff8cf57f0.gif

7. 获取解决方案代码