当前位置: 首页 > article >正文

【Android 组件】使用 XML 传统方式实现 Navigation 导航功能

一、概述导航是指允许用户跨越、进入和退出应用中不同内容片段的交互。Android Jetpack 的 Navigation 组件是官方推荐的页面导航和转场解决方案,能帮你轻松处理 Fragment 之间的切换、返回栈管理,支持底部导航栏和动画。1、主要概念NavHostFragment(导航宿主):包含当前导航目的地的界面元素。NavGraph(导航图):一种数据结构,用于定义应用中的所有导航目的地以及这些目的地之间的连接。NavController(导航控制器):用于管理目的地之间导航的中央协调器。该控制器提供了一些方法,可在目的地之间导航、处理深层链接、管理返回堆栈等。NavDestination(导航目的地):导航图中的节点。当用户导航到此节点时,主机会显示其内容。路线:唯一标识目的地及其所需的任何数据。可以使用路线导航到目的地。返回堆栈:导航控制器 NavController 内用于保存用户近期所到目的地的堆栈。2、主要功能动画和过渡:为动画和过渡提供标准化资源。深层链接:实现并处理可将用户直接转到目的地的深层链接。界面模式:只需极少的额外工作即可支持抽屉式导航栏和底部导航等模式。类型安全:支持在目的地之间传递类型安全的数据。ViewModel 支持:允许将 ViewModel 的作用域限定为导航图,以便在导航图的目的地之间共享与界面相关的数据。fragment 事务:全面支持和处理 fragment 事务。返回和向上:默认情况下,系统会正确处理返回和向上操作。3、目的地类型有三种常规类型的目的地:托管、对话框和 activity。类型说明用例托管填充整个导航宿主。托管目的地的大小与导航宿主的大小相同,之前的目的地不会显示。主界面和详情界面。最常用和最基本的目的地对话框显示叠加界面组件。此界面与导航宿主的位置或大小无关。之前的目的地会显示在该目的地下方。提醒、选择、表单。activity表示应用中的独特界面或功能。充当导航图的退出点,启动与 Navigation 组件分开管理的新 Android activity。在现代安卓开发 中,应用由 1 个 activity 组成。因此,当与第三方 activity 互动或作为迁移过程的一部分时,最适合使用 activity 目的地。二、基础开发流程(底部导航栏)1、添加依赖库在项目模块的 build.gradle.ks 文件中添加依赖库:dependencies{...implementation("androidx.activity:activity-ktx:1.10.1")implementation("androidx.fragment:fragment-ktx:1.5.6")// navigationvalnavVersion="2.9.6"implementation("androidx.navigation:navigation-fragment:$navVersion")implementation("androidx.navigation:navigation-ui:$navVersion")}2、创建导航图(NavGraph)在 app/res/ 目录下,右键– New -- Android Resource Directory 打开新建资源目录窗口,选择资源类型 navigation 创建导航目录:在 navigation 资源目录下新建导航图文件 nav_graph.xml,在导航图文件中定义不同的目的地 fragment:?xml version="1.0"encoding="utf-8"?navigation xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/nav_graph"app:startDestination="@id/homeFragment"!--首页--fragment android:id="@+id/homeFragment"android:name="com.android.navigationdemo.fragment.HomeFragment"tools:layout="@layout/fragment_home"android:label="@string/nav_home"/!--项目管理--fragment android:id="@+id/projectFragment"android:name="com.android.navigationdemo.fragment.ProjectFragment"tools:layout="@layout/fragment_project"android:label="@string/nav_project"/!--用户管理--fragment android:id="@+id/userFragment"android:name="com.android.navigationdemo.fragment.UserFragment"tools:layout="@layout/fragment_user"android:label="@string/nav_user"//navigation3、创建菜单资源文件在 app/res/ 目录下创建菜单资源目录(右键 - New - Android Resource Directory,选择 menu 类型),在 /res/menu/ 资源目录下创建导航菜单资源文件nav_menu.xml,用来定义底部导航的菜单项内容。特别注意:菜单中的 id 内容必须跟导航图中定义的 fragment 的 id 完全一致,否则点击菜单项时不会进行 fragment 切换。?xml version="1.0"encoding="utf-8"?menu xmlns:android="http://schemas.android.com/apk/res/android"!--首页,id对应导航图中的fragment的id--item android:id="@+id/homeFragment"android:title="@string/nav_home"android:icon="@mipmap/nav_home"/!--工程管理--item android:id="@+id/projectFragment"android:title="@string/nav_project"android:icon="@mipmap/nav_project"/!--用户管理--item android:id="@+id/userFragment"android:title="@string/nav_user"android:icon="@mipmap/nav_user"//menu4、Activity布局添加导航宿主和底部导航栏在 Activity 的 XML 文件中,通过导航容器 FragmentContainerView 添加导航宿主 NavHostFragment,并通过 BottomNavigationView 底部导航栏控件添加导航栏。在 FragmentContainerView 容器控件中通过设置navGraph属性关联nav_graph.xml导航图文件。在 BottomNavigationView 底部导航栏控件中通过menu属性关联nav_menu.xml导航菜单文件。?xml version="1.0"encoding="utf-8"?androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/androi

相关文章:

【Android 组件】使用 XML 传统方式实现 Navigation 导航功能

一、概述 导航是指允许用户跨越、进入和退出应用中不同内容片段的交互。Android Jetpack 的 Navigation 组件是官方推荐的页面导航和转场解决方案,能帮你轻松处理 Fragment 之间的切换、返回栈管理,支持底部导航栏和动画。 1、主要概念 NavHostFragment(导航宿主):包含当…...

CC26XX低功耗实战:手把手教你配置TI-RTOS自动睡眠策略,让设备续航翻倍

CC26XX低功耗实战:TI-RTOS自动睡眠策略配置与深度优化指南 在物联网设备开发中,电池续航能力往往是决定产品成败的关键因素。德州仪器(TI)的CC26XX系列无线微控制器凭借其出色的低功耗特性,成为众多智能家居、可穿戴设备和工业传感器节点的首…...

天准星智携手BlackBerry QNX,共筑智能驾驶与泛机器人产业新未来

近日,智能驾驶及泛机器人领域的创新企业天准星智(天准科技控股子公司)与全球汽车及嵌入式软件领导者BlackBerry QNX共同宣布建立战略合作。双方将依托BlackBerry QNX领先的软件技术体系,携手打造面向汽车工业、泛机器人及AIoT领域…...

3分钟免费绕过iPhone激活锁:applera1n工具终极使用指南

3分钟免费绕过iPhone激活锁:applera1n工具终极使用指南 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 当您遇到二手iPhone无法激活、忘记Apple ID密码或继承设备时,applera1n这…...

ISCC-pwn(2026)

复现一下 文章目录校赛练武pwn1pwn2pwn3pwn4总结校赛练武 pwn1 32位泄露canary后,栈溢出到后门即可。 from pwn import * context.terminal ["tmux","splitw","-h"] context.log_level debugpprocess(./attachment-5) #premote(3…...

TVA与CNN的历史性对决(18)

重磅预告:本专栏将独家连载新书《AI视觉技术:从入门到进阶》精华内容。本书是《AI视觉技术:从进阶到专家》的权威前导篇,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“AI教…...

agentsrc-py:为AI编程助手注入精准源代码上下文,消除代码幻觉

1. 项目概述:为AI编程助手注入“源代码级”的上下文如果你和我一样,深度依赖像 Cursor、Claude Code 这类 AI 编程助手来提升开发效率,那你一定也踩过同样的坑:当你让助手帮你写一个基于 Pydantic 的数据验证,或者调用…...

事件驱动架构中的状态机模式:ralph-loop实现异步工作流管理

1. 项目概述:一个“自循环”的Ralph最近在折腾数据管道和API集成时,我遇到了一个挺有意思的项目:Endogen/ralph-loop。乍一看名字,你可能会有点懵,ralph?这不是个名字吗?怎么还“loop”上了&…...

System V 进程间通信:共享内存、消息队列与信号量

文章目录1、共享内存简介与原理2、共享内存API接口2.1、shmget(创建/获取)2.2、shmat(映射)和shmdt(解除挂接)2.3、shmctl(控制)3、共享内存应用4、消息队列(了解&#x…...

5个步骤彻底解决MelonLoader加载问题:从安装到调试的完整指南

5个步骤彻底解决MelonLoader加载问题:从安装到调试的完整指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 你是否…...

终极指南:5分钟搭建免费网盘直链解析服务,告别限速烦恼

终极指南:5分钟搭建免费网盘直链解析服务,告别限速烦恼 【免费下载链接】netdisk-fast-download 聚合多种主流网盘的直链解析下载服务, 一键解析下载,已支持夸克网盘/uc网盘/蓝奏云/蓝奏优享/小飞机盘/123云盘等. 支持文件夹分享解析. 体验地…...

计算机毕业设计 | SpringBoot+vue编程训练系统设计与实现 在线考试系统(附源码+论文)

1,绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理编程训练系统的相关信息成为必然…...

割草机器人行业市场分析报告【5】- 政策、标准与合规环境

第5章:政策、标准与合规环境 5.1 各国环保政策、燃油设备禁令时间表 环保政策与燃油禁令是驱动割草机器人需求的结构性力量,其影响力正在加速显现。...

如何快速配置FF14智能钓鱼计时器:渔人的直感完全指南

如何快速配置FF14智能钓鱼计时器:渔人的直感完全指南 【免费下载链接】Fishers-Intuition 渔人的直感,最终幻想14钓鱼计时器 项目地址: https://gitcode.com/gh_mirrors/fi/Fishers-Intuition 想要在《最终幻想14》中成为钓鱼大师吗?渔…...

安全认证与访问控制

文章目录One Time Password一次性密码平台认证Basic Authentication 基本认证Digest Auth 摘要认证NTLM认证协议Kerberos 网络身份验证协议Token Authentication 令牌认证OAuth Authentication 第三方授权登录API Key AuthenticationSession-Cookie 会话认证ip白名单/白名单认证…...

如何通过SQL改写避免走全表扫描_添加过滤条件与强制索引提示

索引不会自动生效,需WHERE匹配最左前缀且无函数/类型转换;JOIN驱动表选择、OR/IS NULL处理、数据分布变化均影响索引使用,优化需综合评估数据分布、查询频率与写入压力。WHERE 条件没写对,索引根本不会用MySQL 和 PostgreSQL 都不…...

多语言下拉选择器的统一状态管理与 sessionStorage 持久化实践

本文详解如何通过 jQuery 统一控制多个语言切换下拉框&#xff08;<select>&#xff09;的状态同步、初始渲染与持久化&#xff0c;避免因事件绑定混乱或 sessionStorage 未初始化导致的显示错乱问题。 本文详解如何通过 jquery 统一控制多个语言切换下拉框&#xf…...

操作系统 | 处理机调度全解析

&#x1f355; 操作系统的“外卖派单员”&#xff1a;CPU 调度与死锁全攻略 &#x1f69a;&#x1f4a8;大家好&#xff01;&#xff01;&#xff01;☕️想象一下&#xff0c;你是一个拥有无限披萨&#xff08;CPU时间&#xff09;的披萨店老板&#xff0c;而你的店里只有一个…...

HarmonyOS应用开发全流程深度解析:从入门到精通的20000字指南

第一章 鸿蒙生态架构与开发理念1.1 鸿蒙操作系统双版本体系 HarmonyOS与OpenHarmony构成华为"18N"全场景战略的技术底座。商业版HarmonyOS由华为维护&#xff0c;集成消费级设备专有功能&#xff1b;开源版OpenHarmony由开放原子基金会管理&#xff0c;适配工业、电网…...

不只是骷髅海:从《亡灵》设定看游戏设计中“死亡”主题的5种高级玩法与平衡性设计

超越骷髅海&#xff1a;游戏设计中死亡主题的五大高阶玩法与平衡艺术 当《魔兽争霸3》中死亡骑士高举霜之哀伤召唤食尸鬼大军时&#xff0c;玩家第一次体验到亡灵军团"越打越多"的独特快感。但二十年后的今天&#xff0c;单纯的数量压制早已无法满足硬核玩家对策略深…...

达梦数据库修改参数方法

一般用sp_set_para_value()修改新版本达梦支持alter system修改&#xff0c;很类似oracle的命令具体语法树尝试一下 19:42:34 SYSDBALOCALHOST:5236> alter system set dmsql_et_cnt50000 spfile; DMSQL 过程已成功完成 已用时间: 11.967(毫秒). 执行号:13217. 19:42:48 SY…...

如何用3步快速掌握ChanlunX缠论自动化分析终极方法

如何用3步快速掌握ChanlunX缠论自动化分析终极方法 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否在股票技术分析中感到困惑&#xff1f;面对复杂的缠论理论&#xff0c;手动绘制笔、段、中枢结构…...

3大架构维度解析开源直播聚合解决方案:Dart跨平台技术深度实践

3大架构维度解析开源直播聚合解决方案&#xff1a;Dart跨平台技术深度实践 【免费下载链接】dart_simple_live 简简单单的看直播 项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_live 当技术决策者面对多平台直播整合的复杂挑战时&#xff0c;最核心的痛…...

Windows 10能运行安卓应用吗?一个开源项目带来的惊喜答案

Windows 10能运行安卓应用吗&#xff1f;一个开源项目带来的惊喜答案 【免费下载链接】WSA-Windows-10 This is a backport of Windows Subsystem for Android to Windows 10. 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Windows-10 还在为Windows 10无法运行安…...

从Fastjson到Jackson:Java项目里JSON库怎么选?一份避坑与迁移指南

从Fastjson到Jackson&#xff1a;Java项目里JSON库的深度选型与迁移实战 在微服务架构盛行的今天&#xff0c;JSON作为数据交换的事实标准&#xff0c;其处理库的选择直接影响着系统性能、安全性和可维护性。当团队面临技术栈升级或重构时&#xff0c;如何在Fastjson、Jackson和…...

ShawzinBot深度解析:3个技巧让Warframe音乐演奏从新手变大师

ShawzinBot深度解析&#xff1a;3个技巧让Warframe音乐演奏从新手变大师 【免费下载链接】ShawzinBot Convert a MIDI input to a series of key presses for the Shawzin 项目地址: https://gitcode.com/gh_mirrors/sh/ShawzinBot 你是否曾经想在Warframe中演奏自己喜欢…...

StreamingVLM:实时视频流理解框架的技术解析与应用

1. 项目概述&#xff1a;当视频流遇上实时理解去年在给某智能安防系统做技术咨询时&#xff0c;客户指着监控墙上不断刷新的画面问我&#xff1a;"这些摄像头7x24小时工作&#xff0c;但真正需要人工介入的异常事件可能一天就两三起&#xff0c;有没有可能让AI像人一样持续…...

终极解决方案:高效实现Android手机USB网络共享到Mac的完整指南

终极解决方案&#xff1a;高效实现Android手机USB网络共享到Mac的完整指南 【免费下载链接】HoRNDIS Android USB tethering driver for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/ho/HoRNDIS 你是否曾经在Mac上尝试连接Android手机的网络共享&#xff0c;却遇…...

告别VMware!在Win11上用WSL2秒开openEuler,还能无缝用VSCode开发

告别VMware&#xff01;在Win11上用WSL2秒开openEuler&#xff0c;还能无缝用VSCode开发 如果你是一名习惯在Windows环境下开发的程序员&#xff0c;同时又需要频繁使用Linux环境&#xff0c;那么传统虚拟机&#xff08;如VMware或VirtualBox&#xff09;可能已经让你感到疲惫不…...

TypingMind静态自托管部署指南:构建私有AI聊天前端工作台

1. 项目概述&#xff1a;为什么我们需要一个更好的AI聊天前端&#xff1f;如果你和我一样&#xff0c;已经深度使用过ChatGPT、Claude、Gemini这些主流AI模型&#xff0c;你可能会发现一个痛点&#xff1a;官方网页界面虽然能用&#xff0c;但总感觉差点意思。功能分散、对话管…...