Loading... ## 概述 导航组件是一组库。 - 简化安卓导航,代替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. 创建导航图资源 导航发生在应用中的各个目的地之间,这些目的地是通过操作连接的。 导航图是一种资源文件,其中包含应用所有的目的地和操作。该图表会显示应用所有的导航路径。 `目的地`是指应用中的不同内容区域 `操作`是指`目的地`之间的逻辑连接,表示用户可以采取的路径 在项目中添加导航图,请执行以下擦作 1. 在Project 中,右击`res`目录,然后一次选择**New**>**Android Resource File** 。此时系统会显示**New Resource File** 对话框。 2. 在**File name**中输入名称,例如"nav_graph" 3. 在**Resource type**下拉列表中选择**Navigation**,然后单击**OK** > 当添加首个导航图时,编辑器会在res目录下创建一个navigation资源目录,该目录包含导航图资源文件,如果此时项目中没有将导航依赖添加到应用的build.gradle文件中,则AS会显示一条提示,自动添加依赖项。 #### 3. 向`Activity`添加导航宿主 通过在布局设计编辑器中向`Activity` 添加`NavHostFragment`。 1. 双击Activity的布局xml文件,以在布局设计编辑器中打开 2. 在**Palette**窗格中,选择Containers类别,找到`NavHostFragment`。 3. 将`NavHostFragment`视图拖动到`Activity`中。 4. 在随即显示的`Navigation Graphs` 对话框中,选择要与此导航宿主相互关联的导航图,点击**OK** #### 4. 向导航图添加目的地 1. 添加目的地 2. 指定起始目的地 3. 连接目的地 ##### 目的地的两个重要属性: * 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导航 ```kotlin viewTransactionsButton.setOnClickListener { view -> view.findNavController().navigate(R.id.viewTransactionsAction) } ``` 最后修改:2020 年 05 月 29 日 05 : 24 PM © 允许规范转载