导航 3 是一个旨在与 Compose 配合使用的新导航库。借助导航 3,您可以完全控制返回栈,并且导航到目的地和从目的地返回就像从列表中添加和移除项目一样简单。它通过提供以下功能创建灵活的应用导航系统:
- 用于为返回栈建模的约定,其中返回栈上的每个条目都代表用户已导航到的内容
- 可随返回栈更改(包括动画)自动更新的 UI
- 返回栈中项目的范围,允许在项目位于返回栈中时保留状态
- 自适应布局系统,允许同时显示多个目的地,并允许在这些布局之间无缝切换
- 内容与其父布局(元数据)通信的机制
从高层次来看,您可以按以下方式实现导航 3:
- 定义用户可以在您的应用中导航到的内容,每个内容都有一个唯一的键,并添加一个函数以将该键解析为内容。请参阅将键解析为内容。
- 创建一个返回栈,当用户导航您的应用时,会将键推入并移除该返回栈。请参阅创建返回栈。
- 使用
NavDisplay
显示您应用的返回栈。每当返回栈发生变化时,它都会更新 UI 以显示相关内容。请参阅显示返回栈。 - 根据需要修改
NavDisplay
的场景策略,以支持自适应布局和不同平台。
您可以在 AOSP 上查看导航 3 的完整源代码。
Jetpack Navigation 的改进
导航 3 在以下方面改进了原始 Jetpack Navigation API:
- 提供与 Compose 更简单的集成
- 让您完全控制返回栈
- 可以创建同时从返回栈中读取多个目的地的布局,从而使其能够适应窗口大小和其他输入的更改。
在这篇博文中详细了解导航 3 的原理和 API 设计选择。
代码示例
recipes 代码库包含如何使用导航 3 构建块解决常见导航挑战的示例。