概述
导航组件是一组库。
- 简化安卓导航,代替intent
- 处理后台堆栈
- 自动片段相互作用
- 类型安全的参数传递, 代替intent
- 处理基于导航的动画
- 简化深层链接
它由导航图,导航宿主,导航控制器一系列相关的类组成。
使用
1. 添加支持库
在build.gradle
中添加依赖项
也可以在创建导航图时,由编辑器帮忙添加依赖项。
dependencies {
// 具体版本要根据代码提示写
def nav_version = "2.3.0-beta01"
// Java language implementation
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"
// Kotlin
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
// Dynamic Feature Module Support
implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"
// Testing Navigation
androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"
}
2. 创建导航图资源
导航发生在应用中的各个目的地之间,这些目的地是通过操作连接的。
导航图是一种资源文件,其中包含应用所有的目的地和操作。该图表会显示应用所有的导航路径。目的地
是指应用中的不同内容区域操作
是指目的地
之间的逻辑连接,表示用户可以采取的路径
在项目中添加导航图,请执行以下擦作
- 在Project 中,右击
res
目录,然后一次选择New>Android Resource File 。此时系统会显示New Resource File 对话框。 - 在File name中输入名称,例如"nav_graph"
在Resource type下拉列表中选择Navigation,然后单击OK
当添加首个导航图时,编辑器会在res目录下创建一个navigation资源目录,该目录包含导航图资源文件,如果此时项目中没有将导航依赖添加到应用的build.gradle文件中,则AS会显示一条提示,自动添加依赖项。
3. 向Activity
添加导航宿主
通过在布局设计编辑器中向Activity
添加NavHostFragment
。
- 双击Activity的布局xml文件,以在布局设计编辑器中打开
- 在Palette窗格中,选择Containers类别,找到
NavHostFragment
。 - 将
NavHostFragment
视图拖动到Activity
中。 - 在随即显示的
Navigation Graphs
对话框中,选择要与此导航宿主相互关联的导航图,点击OK
4. 向导航图添加目的地
- 添加目的地
- 指定起始目的地
- 连接目的地
目的地的两个重要属性:
- id
- label 此属性决定该Fragment在应用栏的名字。
连接目的地操作的pop属性
Pop Behavior 是在操作到达目的地后清理返回堆栈的行为。
举例说明:
A --操作1 > B --操作2 > C --操作3 > A
操作3中的Pop Behavior 设置
popUpTo | popUpToInclusive | 返回堆栈状态 | 解释 |
---|---|---|---|
无 | 无 | ABCA | 没有清理返回堆栈 |
A | false | AA | 清理返回堆栈到上一个 A 但没有清理上一个A |
A | true | A | 清理返回堆栈到上一个A,上一个A也被清理 |
B | true | AA | 清理返回堆栈到上一个B, 上一个B也被清理 |
6. 使用导航控制器导航到目的地
使用ID导航
viewTransactionsButton.setOnClickListener { view ->
view.findNavController().navigate(R.id.viewTransactionsAction)
}