文章目录
- 一、 概述
- 二、 使用步骤
-
-
- 2.1 步骤一:在应用级 build.gradle (非项目级build.gradle)文件中添加依赖
- 2.2 步骤二:在项目级 build.gradle (非应用级build.gradle)文件中添加依赖
- 2.3 步骤三:创建导航所涉及的Activity或Fragment
- 2.4 步骤四:创建导航图(src/main/res/navigation/nav_login.xml)
- 2.5 步骤五:设置导航图(src/main/res/navigation/nav_login.xml)
- 2.6 步骤六:向 Activity 添加 NavHost
- 2.7 步骤七:在Activity或Fragment的Java文件中使用导航动作
-
- 三、 参考资料
- 四、 结束语
一、 概述
1.1 导航的概念
导航是指支持用户导航、进入和退出应用中不同内容片段的交互。
1.2 导航的组成
导航组件由以下三个关键部分组成:
- 导航图:在一个集中位置包含所有导航相关信息的 XML 资源。这包括应用内所有单个内容区域(称为目标)以及用户可以通过应用获取的可能路径。
- NavHost:显示导航图中目标的空白容器。导航组件包含一个默认 NavHost 实现 (NavHostFragment),可显示 Fragment 目标。
- NavController:在 NavHost 中管理应用导航的对象。当用户在整个应用中移动时,NavController 会安排 NavHost 中目标内容的交换。
1.3 导航的优势
导航组件提供各种其他优势,包括以下内容:
- 处理 Fragment 事务。
- 默认情况下,正确处理往返操作。
- 为动画和转换提供标准化资源。
- 实现和处理深层链接。
- 包括导航界面模式(例如抽屉式导航栏和底部导航),用户只需完成极少的额外工作。
- Safe Args -可在目标之间导航和传递数据时提供类型安全的Gradle 插件。
- ViewModel 支持 - 您可以将 ViewModel的范围限定为导航图,以在图表的目标之间共享与界面相关的数据。
二、 使用步骤
2.1 步骤一:在应用级 build.gradle (非项目级build.gradle)文件中添加依赖
dependencies {
def nav_version = "2.3.5"
// Java language implementation
implementation ("androidx.navigation:navigation-fragment:$nav_version")
implementation ("androidx.navigation:navigation-ui:$nav_version")
// Feature module Support
implementation ("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")
// Testing Navigation
androidTestImplementation ("androidx.navigation:navigation-testing:$nav_version")
// Jetpack Compose Integration
implementation ("androidx.navigation:navigation-compose:2.4.0-beta02")
}
2.2 步骤二:在项目级 build.gradle (非应用级build.gradle)文件中添加依赖
dependencies {
def nav_version = "2.3.5"
classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version")
}
2.3 步骤三:创建导航所涉及的Activity或Fragment
①创建导航所涉及的Activity,举例如下:
②创建导航所涉及的Fragment,举例如下:
2.4 步骤四:创建导航图(src/main/res/navigation/nav_login.xml)
新建导航图
- 在“Project”窗口中,右键点击 res 目录,然后依次选择 New > Android Resource File。此时系统会显示New Resource File 对话框。
- 在 File name 字段中输入名称,例如“nav_login”。
- 从 Resource type 下拉列表中选择 Navigation,然后点击 OK。
2.5 步骤五:设置导航图(src/main/res/navigation/nav_login.xml)
design窗口
导航图XML代码
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_login"
app:sta