Android 导航之Navigation 组件的介绍与使用

news2024/11/25 6:43:16

1、介绍:

        在以前的应用中,针对多导航模块的使用,常见的有tabhost或者FragmentTabHost,但是这些在使用的过程中,非常臃肿,包括加载和管理也不如人意。在AndroidX中,官方引入Navigation模块,通过布局绑定fragment来完成

       

 Navigation 是一个框架,用于在 Android 应用中的“目的地”之间导航,该框架提供一致的 API,无论目的地是作为 fragment、activity 还是其他组件实现。

Google开发者官方API

二、接入步骤

1、在布局中新增一个fragment的view

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

name="androidx.navigation.fragment.NavHostFragment",固定写法,必须指向NavHostFragment

defaultNavHost:为true,设为默认host

navGraph:子fragment的配置路径

2、创建navigation(navGraph)

在res目录下新建navigation文件夹

 在gav_graph.xml下新增fragment节点,配置如下

<?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"
    android:id="@+id/nav_graph"
    app:startDestination="@id/fragment_one">


    <fragment
        android:id="@+id/fragment_one"
        android:name="com.example.wiik.testdemo.fragment.OneFragment" />

    <fragment
        android:id="@+id/fragment_two"
        android:name="com.example.wiik.testdemo.fragment.TwoFragment" />

    <fragment
        android:id="@+id/fragment_three"
        android:name="com.example.wiik.testdemo.fragment.ThreeFragment" />



</navigation>

如果你有几个fragment,就新增多少个

app:startDestination:默认一开始加载哪个fragment,就指向该fragment的id

fragment的顺序随意,不受限制。

3、如何在Activity或者Fragment中引用

我们是通过NavController 来管理

public static NavController findNavController(@NonNull Activity activity, @IdRes int viewId)

1,、activity: 当前的宿主

2、viewId:就是fragment的id,testfragment,将layout的fragment加载进来

3、var controll = Navigation.findNavController(this, R.id.testfragment) as                                 NavController;

这样,我们就初始化好一个控制器。

动态加载导航到指定的child fragment,该fragment必须已添加到navigation目录下xml文件中,也就是当前加载的列表

切换fragment:

controll?.navigate(R.id.fragment_one)

注意:这个id一定是graph加载的xml文件中的,否则报错找不到

动态切换navigation 目录下xml的配置文件

1.先读取
var gavpath=controll?.navInflater?.inflate(R.navigation.nav_graph)
2.再设置
controll?.graph=gavpath!!

 

备注:gavpath!!这种写法表示可为null,如果直接赋值,会提示错误。在变量后面加上 "!!"即可

添加item的切换监听:addOnDestinationChangedListener

controll?.addOnDestinationChangedListener {controller,destination,arguments->
    
    toast("${destination.displayName}")
    
}

返回上一个fragment:

controll?.navigateUp

其他API可以自行研究

三、总结

想比较以往的tabhost加载,这种导航比较轻量化,我们可以根据业务需求,将不同的加进去,实现动态配置,也方便管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【信管2.4】项目运行环境与项目经理

项目运行环境与项目经理加餐加餐来了哦&#xff0c;今天的内容在 《信息系统项目管理师教程》 这本教材里是没有的&#xff0c;而且在 PMBOK 第五版中也是没有的。这部分内容是 PMBOK 第六版中新加的两个独立章节&#xff0c;不过内容不多&#xff0c;非常轻松&#xff0c;重点…

AGV移动机器人无人叉车控制器设计

AGV控制器是为移动机器人&#xff08;AMR、智能叉车等&#xff09;设计的通用控制器&#xff0c;为移动机器人提供地图构建、定位导航、模型编辑等核心功能。 本方案将移动机器人的核心组件集成于一体&#xff0c;配合功能强大的客户端软件 &#xff0c;可帮助用户快速实现机器…

【数据结构】Java实现数据结构的前置知识,时间复杂度空间复杂度,泛型类的讲解

文章目录数据结构时间复杂度、空间复杂度包装类、装箱与拆箱泛型擦除机制数据结构 当我们在成为一名程序员的这条道路上努力的时候&#xff0c;我们一定经常听到这个词数据结构。那么究竟什么是数据结构呢&#xff1f;数据结构顾名思义&#xff0c;就是数据结构&#xff0c;数…

[附源码]计算机毕业设计JAVA校园快递管理系统

[附源码]计算机毕业设计JAVA校园快递管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

vtkjs中Sample Distance功能

通过 SetSampleDistance () 来设置每条射线的采样步长&#xff0c;默认值为1&#xff0c;单位为世界坐标系单位&#xff0c;数值越小越精细 通过 SetImageSampleDistance () 来设置图像采样距离&#xff0c;默认值为1&#xff0c;即投射光线的间隔数值越小越精细 核心代码如下…

【OpenCV-Python】教程:3-10 直方图(2)直方图均衡

OpenCV Python 直方图均衡化 【目标】 理解直方图均衡化提升图像的对比度 Histogram Equalization ??? 将图像的直方图拉均衡一些&#xff0c;分散一些&#xff1b;可以提升对比度。 【代码】 通过上面的图像可以看出&#xff0c;高亮度区域较少&#xff0c;需要分散该图像…

Java HashMap 的扩容因子为什么是 0.75

所谓的加载因子&#xff0c;也叫扩容因子或者负载因子&#xff0c;它是用来进行扩容判断的。 假设加载因子是0.5&#xff0c;HashMap初始化容量是16&#xff0c;当HashMap中有16 * 0.58个元素时&#xff0c;HashMap就会进行扩容操作。 而HashMap中加载因子为0.75&#xff0c;…

pandas 100题

文章目录1.将下面字典创建为DataFrame2.提取含有字符串“python”的行3.输出df所有列名4.修改第列名5.统计grame列中每种编程语言出现的次数6 将空值用上下值的平均值填充7 列值大于3的数8 去重列9 计算列平均值10 将列转换列表11 保存到excel12 查询行列13 列值大于3小月7的值…

【Spring】编程式事务的应用场景理解

前言 我们经常在使用Spring全家桶开发JavaEE项目的时候&#xff0c;一想到事务就会习惯性的使用声明式注解Transactional,由Spring框架帮你做AOP实现事务的回滚&#xff0c;但是声明式事务恰恰比较方便&#xff0c;所以有些场景下并不好用&#xff0c;接下来我来举一个例子&am…

服务器下载mmdetection

1.申请账号密码 找实验室有root权限的同学创建一个账号密码 2.命令行中敲&#xff1a;ssh服务器账号&#xff0c;然后输入自己的服务器密码&#xff08;确认自己是否处于校园网环境&#xff0c;如果不在的话记得连vpn&#xff09; 3.命令行敲cd /切换到根目录然后ls查看服务…

通过SCADA实现KPI分析和预测性维护远比想象中简单

一、前言 随着工业发展的不断进步&#xff0c;越来越多的企业开始注重KPI分析和预测性维护。通过数据分析实现智能制造已经成为不可缺少的环节。制定并分析关键绩效指标&#xff08;KPI&#xff09;是实现数据分析战略的重要一步&#xff0c;因为只有跟踪这些关键绩效指标才能…

题目1444:蓝桥杯201 4年第五届真题斐波那契

这篇文章是帮一个叫做【废柴成长中】的孩子写的。 题目&#xff1a; 这里难点应该就是在【输入为一行用空格分开的整数n m p(0<n,m&#xff0c;p<10^18)】 &#xff0c;这里一下子就把最大值干成long的最大范围了&#xff0c;很明显&#xff0c;long肯定也不行。 解析其…

[附源码]计算机毕业设计JAVA闲置物品线上交易系统

[附源码]计算机毕业设计JAVA闲置物品线上交易系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

区块链工作原理(节点、层)

Users/Nodes in a Blockchain Network 在某个节点被当作区块链网络的一部分之前&#xff0c;它必须要完成以下的要求&#xff1a; 节点需要为认证过程生成公钥/私钥对节点需要与区块链网络中的其他一部分节点建立直接连接&#xff08;peer connection&#xff09;&#xff0c…

KVM虚拟机迁移

一、KVM宿主机高可用架构设计 宿主机故障&#xff0c;内部虚拟机可以不受影响&#xff0c;可以迁移走负载均衡&#xff0c;当某个宿主机压力过大&#xff0c;可以将部分虚拟机迁移到其他机器&#xff0c;降低其负载。 1.1、架构设计 1.2、实验机器 机器 IP 角色 node1 192.…

L. Paid Leave(贪心)[CCPC Finals 2021]

题目如下&#xff1a; 思路 or 题解 我们可以先只考虑第一段(两个休息日之间) 白色为休息日&#xff0c;蓝色为工作日 我们思考&#xff0c;如果在满足题意的条件下&#xff0c;如何安排额外的休息日可以使答案更优&#xff1a; 贪心可得&#xff1a;额外的休息日尽量往后安排…

RabbitMQ之TTL机制

在京东下单&#xff0c;订单创建成功&#xff0c;等待支付&#xff0c;一般会给30分钟的时间&#xff0c;开始倒计时。如果在这段时间内用户没有支付&#xff0c;则默认订单取消。 该如何实现&#xff1f; 定期轮询&#xff08;数据库等&#xff09; 用户下单成功&#xff0…

【自然语言处理(NLP)】聊天机器人模块实现

【自然语言处理&#xff08;NLP&#xff09;】聊天机器人模块实现 作者简介&#xff1a;在校大学生一枚&#xff0c;华为云享专家&#xff0c;阿里云专家博主&#xff0c;腾云先锋&#xff08;TDP&#xff09;成员&#xff0c;云曦智划项目总负责人&#xff0c;全国高等学校计算…

《异常检测——从经典算法到深度学习》20 HotSpot:多维特征 Additive KPI 的异常定位

《异常检测——从经典算法到深度学习》 0 概论 1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法 3 基于One-Class SVM的异常检测算法 4 基于高斯概率密度异常检测算法 5 Opprentice——异常检测经典算法最终篇 6 基于重构概率的 VAE 异常检测 7 基于条件VAE异常…

[附源码]计算机毕业设计JAVA鲜花销售管理系统

[附源码]计算机毕业设计JAVA鲜花销售管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…