概述

导航组件是一组库。

  • 简化安卓导航,代替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 设置

popUpTopopUpToInclusive返回堆栈状态解释
ABCA没有清理返回堆栈
AfalseAA清理返回堆栈到上一个 A 但没有清理上一个A
AtrueA清理返回堆栈到上一个A,上一个A也被清理
BtrueAA清理返回堆栈到上一个B, 上一个B也被清理

6. 使用导航控制器导航到目的地

使用ID导航

    viewTransactionsButton.setOnClickListener { view ->
       view.findNavController().navigate(R.id.viewTransactionsAction)
    }
    
最后修改:2020 年 05 月 29 日
如果觉得我的文章对你有用,请随意赞赏