文章目录

  • 一、 概述
    • 1.1 导航的概念
    • 1.2 导航的组成
    • 1.3 导航的优势
  • 二、 使用步骤
    • 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 导航的组成

导航组件由以下三个关键部分组成:

  1. 导航图:在一个集中位置包含所有导航相关信息的 XML 资源。这包括应用内所有单个内容区域(称为目标)以及用户可以通过应用获取的可能路径。
  2. NavHost:显示导航图中目标的空白容器。导航组件包含一个默认 NavHost 实现 (NavHostFragment),可显示 Fragment 目标。
  3. NavController:在 NavHost 中管理应用导航的对象。当用户在整个应用中移动时,NavController 会安排 NavHost 中目标内容的交换。

1.3 导航的优势

导航组件提供各种其他优势,包括以下内容:

  1. 处理 Fragment 事务。
  2. 默认情况下,正确处理往返操作。
  3. 为动画和转换提供标准化资源。
  4. 实现和处理深层链接。
  5. 包括导航界面模式(例如抽屉式导航栏和底部导航),用户只需完成极少的额外工作。
  6. Safe Args -可在目标之间导航和传递数据时提供类型安全的Gradle 插件。
  7. ViewModel 支持 - 您可以将 ViewModel的范围限定为导航图,以在图表的目标之间共享与界面相关的数据。

二、 使用步骤

2.1 步骤一:在应用级 build.gradle (非项目级build.gradle)文件中添加依赖

dependencies {def nav_version = "2.3.5"// Java language implementationimplementation ("androidx.navigation:navigation-fragment:$nav_version")implementation ("androidx.navigation:navigation-ui:$nav_version")// Feature module Supportimplementation ("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")// Testing NavigationandroidTestImplementation ("androidx.navigation:navigation-testing:$nav_version")// Jetpack Compose Integrationimplementation ("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)

新建导航图

  1. 在“Project”窗口中,右键点击 res 目录,然后依次选择 New > Android Resource File。此时系统会显示New Resource File 对话框。
  2. 在 File name 字段中输入名称,例如“nav_login”。
  3. 从 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:startDestination="@id/loginFragment"><fragmentandroid:id="@+id/loginFragment"android:name="com.microdot.demo.fragment.login.LoginFragment"android:label="fragment_login"tools:layout="@layout/fragment_login" ><actionandroid:id="@+id/action_loginFragment_to_forgetPasswordFragment"app:destination="@id/forgetPasswordFragment" /><actionandroid:id="@+id/action_loginFragment_to_registerFragment"app:destination="@id/registerFragment" /><actionandroid:id="@+id/action_loginFragment_to_userAgreementFragment"app:destination="@id/userAgreementFragment" /><actionandroid:id="@+id/action_loginFragment_to_privacyAgreementFragment"app:destination="@id/privacyAgreementFragment" /><actionandroid:id="@+id/action_loginFragment_to_mainActivity"app:destination="@id/mainActivity" /></fragment><fragmentandroid:id="@+id/forgetPasswordFragment"android:name="com.microdot.demo.fragment.login.ForgetPasswordFragment"android:label="fragment_forget_password"tools:layout="@layout/fragment_forget_password" /><fragmentandroid:id="@+id/registerFragment"android:name="com.microdot.demo.fragment.login.RegisterFragment"android:label="fragment_register"tools:layout="@layout/fragment_register" /><fragmentandroid:id="@+id/userAgreementFragment"android:name="com.microdot.demo.fragment.login.UserAgreementFragment"android:label="fragment_user_agreement"tools:layout="@layout/fragment_user_agreement" /><fragmentandroid:id="@+id/privacyAgreementFragment"android:name="com.microdot.demo.fragment.login.PrivacyAgreementFragment"android:label="fragment_privacy_agreement"tools:layout="@layout/fragment_privacy_agreement" /><activityandroid:id="@+id/mainActivity"android:name="com.microdot.demo.activity.MainActivity"android:label="activity_main"tools:layout="@layout/activity_main" />
</navigation>

2.6 步骤六:向 Activity 添加 NavHost

导航宿主是 Navigation 组件的核心部分之一。导航宿主必须派生于 NavHost。Navigation 组件的默认 NavHost 实现 (NavHostFragment) 负责处理 fragment 目的地的交换。
Navigation 组件旨在用于具有一个主 Activity 和多个 Fragment 目的地的应用。主 Activity 与导航图相关联,且包含一个负责根据需要交换目的地的 NavHostFragment。在具有多个 Activity 目的地的应用中,每个 Activity 均拥有其自己的导航图。
通过 XML 添加 NavHostFragment:

    <androidx.fragment.app.FragmentContainerViewandroid:id="@+id/nav_host_fragment_login"android:name="androidx.navigation.fragment.NavHostFragment"android:layout_width="match_parent"android:layout_height="match_parent"app:defaultNavHost="true"app:navGraph="@navigation/nav_login" />

2.7 步骤七:在Activity或Fragment的Java文件中使用导航动作

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragment//使用binding视图绑定功能binding = FragmentLoginBinding.inflate(inflater, container, false);View view = binding.getRoot();binding.buttonLoginLogin.setOnClickListener(Navigation.createNavigateOnClickListener(R.id.action_loginFragment_to_mainActivity, null));binding.textViewLoginOptionForgetPassword.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_forgetPasswordFragment);}});binding.textViewLoginOptionRegister.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_registerFragment);}});binding.checkBoxLoginAgreement.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Navigation.findNavController(view).navigate(R.id.action_loginFragment_to_userAgreementFragment);}});return view;}

三、 参考资料

https://developer.android.google.cn/guide/navigation/navigation-getting-started#kts


四、 结束语

本文档为博主自主学习Android应用开发过程中的经验总结与心得体会,希望能在读者的学习道路上帮上一点点小忙,共同学习,共同成长。
欢迎读者评论留言,点赞,收藏,分享!


导航组件—Android应用中使用导航图相关推荐

  1. 导航组件—Android应用中使用ViewPager2创建滑动视图

    文章目录 一. 概述 二. 使用步骤 2.1 步骤一:在Activity或Fragment布局文件中添加ViewPager2 2.2 步骤二:创建ViewPager2每一个页面的视图Fragment ...

  2. Android Jetpack导航组件——Navigation的使用

    概述 Navigation是采用一个Activity和多个Fragment形式设计的Ui架构模式,但是众所周知,Fragment的管理一直是个麻烦事,需要通过FragmentManager和Fragm ...

  3. Android导航组件Navigation从入门到精通

    文章目录 一.前言 二.导航简介 2.1 导航组件的组成 2.2 导航的原则 2.2.1 固定的起始目的地 2.2.2 导航状态表现为目的地堆栈 2.2.3 在应用的任务中向上按钮和返回按钮行为相同 ...

  4. Android导航组件Navigation实现原理

    对于导航组件的使用方式不是本文的重点,具体使用可以参考官方文档,导航组件框架是通过fragment来实现的,其核心类主要可以分为三个NavGraph.NavHostController.NavHost ...

  5. android 地图导航开发思路,基础功能-导航组件-开发指南-Android 导航SDK | 高德地图API...

    预置条件 请在您工程的 AndroidManifest.xml 中配置声明导航组件 Activity: android:name="com.amap.api.navi.AmapRouteAc ...

  6. 【Android 组件化】路由组件 ( 构造路由表中的路由信息 )

    文章目录 一.封装路由信息 二.注解处理器 生成路由表信息 1.Activity 中使用 @Route 注解 2.注解处理器中判定注解是否检测出来 3.获取被 @Route 标注的 注解节点 4.判断 ...

  7. Android升级butterknife,Android组件化开发中使用Butterknife的坑

    近来整理代码的时候,要对代码做一些模块化组件化的处理.想要在一个BaseLib里面引入ButterKnife,在这个BaseLib里面声明一个BaseActivty,然后其他module的Activi ...

  8. android module中获取 app_Android组件化架构 - 4. 动态创建

    Android 组件化中使用动态创建的作用是解耦: 1. 反射机制 反射有两个作用:1.反编译:.class->.java;2.通过反射机制访问java对象中的属性,方法,构造器等: 实现反射, ...

  9. Android 应用中十大导航设计错误

    2019独角兽企业重金招聘Python工程师标准>>> 大家好,这里是 2014 年第一期正式的 ADiA 教程.在上一次的设计错误文章里,我们已经简略的提过了一下导航设计上的错误, ...

最新文章

  1. R语言 赋值符号 的区别
  2. 在同一局域网内的同一工作组内登陆其中的机器时显示输入网络密码对话框
  3. JS实现前端动态分页码
  4. amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown
  5. 11月总结#nobody
  6. 每周一喂丨网络黑灰产工具“八大样儿”
  7. 计算机歌曲数我的一个道姑朋友,同人歌|我的一个道姑朋友
  8. 一对情侣用计算机电影,一个剧情电影,讲述一对情侣谈恋爱的故事
  9. #创新应用#善听听书:进入听书的时代!
  10. 国内电子商务从业人员需要具备哪些知识?
  11. unity3D 移动平台性能优化
  12. 我上了985,211,才发现自己一无所有 | 或者,也不能这么说
  13. 冈萨雷斯《数字图像处理》学习笔记(4)--图像复原与重建(含傅里叶切片定理推导)
  14. 网页小游戏源码丨FC模拟器网页版源码
  15. (实验一)十进制整数的原反补移码实现
  16. urlretrieve的用法
  17. 高级商务办公软件应用【7】
  18. 你戴佳明手表吗?服务器遭黑客攻击,全球跑友无法同步跑步数据!
  19. 磁感应强度B与磁场强度H的区别,联系与物理意义
  20. github python抢票_实测两款 GitHub 开源抢票插件,所有坑都帮你踩过了

热门文章

  1. mac安装pyinstaller和py2app打包python程序生成app应用程序
  2. c mysql多表查询,MYSQL---多表查询
  3. 基于Android二手车交易网站系统app
  4. 优秀前端工程师简历收集
  5. android 无动态壁纸,设置的安卓动态壁纸,为什么过一会就自动没有了?
  6. list<map>转xml
  7. 424 B. Megacity
  8. 常见函数三部曲之字符串函数
  9. javascript 使用json 将js 数据转换成json
  10. 2020年9月 September CAIA一级二级 notes电子版下载链接