Android中的导航navigation的使用方式

在 Android 中,导航(Navigation)组件是一种用于管理应用内导航和屏幕之间关系的框架,它可以帮助你以一种更一致和结构化的方式管理应用的各个页面或片段(Fragments)之间的跳转和导航。下面是使用导航组件的基本步骤和关键概念:

1. 添加导航组件依赖

首先,确保在你的 build.gradle 文件中添加导航组件的依赖:

dependencies {implementation "androidx.navigation:navigation-fragment-ktx:2.4.0"implementation "androidx.navigation:navigation-ui-ktx:2.4.0"
}

2. 创建导航图(Navigation Graph)

导航图是一个 XML 文件,用于定义应用的整体导航结构和各个目的地(Destination)之间的连接关系。通常,导航图的文件名为 nav_graph.xml,它应该位于 res/navigation/ 目录下。

示例 nav_graph.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"android:id="@+id/nav_graph"app:startDestination="@id/firstFragment"><fragmentandroid:id="@+id/firstFragment"android:name="com.example.FirstFragment"android:label="First Fragment"tools:layout="@layout/fragment_first"><actionandroid:id="@+id/action_firstFragment_to_secondFragment"app:destination="@id/secondFragment" /></fragment><fragmentandroid:id="@+id/secondFragment"android:name="com.example.SecondFragment"android:label="Second Fragment"tools:layout="@layout/fragment_second" /><!-- 其他目的地声明 --></navigation>

在上述示例中:

  • <navigation> 标签包裹了整个导航图,定义了起始目的地(app:startDestination)为 firstFragment
  • <fragment> 标签定义了每个目的地,包括它们的 ID、类名、标签和关联的布局(在 tools:layout 属性中指定)。
  • <action> 标签定义了从一个目的地到另一个目的地的导航动作。

3. 在布局中使用 NavController

NavController 是一个负责管理与导航相关操作的对象。你可以在 Fragment 或 Activity 的布局文件中使用 NavHostFragment 来托管导航图,并在代码中获取 NavController。

在布局文件中,使用 NavHostFragment

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

其中,app:navGraph 属性指定了使用的导航图资源。

4. 执行导航操作

在 Fragment 或 Activity 中,通过 NavController 执行导航操作。导航操作可以是从一个目的地到另一个目的地,也可以是弹出回退堆栈中的目的地。

在 Fragment 中执行导航操作的示例代码:

// 获取 NavController
val navController = findNavController()// 导航到另一个目的地(例如,从 FirstFragment 到 SecondFragment)
view.findViewById<Button>(R.id.button_next).setOnClickListener {navController.navigate(R.id.action_firstFragment_to_secondFragment)
}

在 Activity 中执行导航操作的示例代码:

// 获取 NavController
val navController = findNavController(R.id.nav_host_fragment)// 导航到另一个目的地(例如,从当前目的地到 nav_graph 中定义的其他目的地)
navController.navigate(R.id.action_current_destination_to_another_destination)

这些是使用导航组件进行 Android 应用内导航的基本步骤和关键概念。通过合理使用导航组件,可以使应用的导航更加清晰、一致和易于维护。
另外

有什么技术问题欢迎加我交流 qilebeaf
本人10多年大厂软件开发经验,精通Android,Java,Python,前端等开发,空余时间承接软件开发设计、课程设计指导、解决疑难bug、AI大模型搭建,AI绘图应用等。
欢迎砸单

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

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

相关文章

vue配置中的process.env

项目中的.env开头的文件是否知道是干什么的呢 主要是为了区分测试环境还是生产环境env.development为测试环境 # 测试环境 NODE_ENV development VUE_APP_BASE_API http://xxxxxxxxx // 命名一定要以 VUE_APP_ 开头&#xff0c;要不然根本取不到 .env.production为生产环境…

C++ 内存分配可视化

GitHub - archibate/mallocvis: allocation visualization in svg graph 正常连续内存分配 #include <vector>int main() {// 堆mallocstd::vector<int> memory;for (int i 0; i < 1000; i) {memory.emplace_back(i*10);}return 0; } 主动内存分配释放 #in…

微信小程序简易录音机

首先先创建一个项目&#xff08;想必大家都会啦那就直接开干&#xff09; 首先上html结构 <view class"wx-container"><view id"title">录音机</view><view id"time">{{hours}}:{{minute}}:{{second}}</view>&l…

20240624在飞凌OK3588-C的Buildroot下查证GPIO64和gpiochip64的差异

20240624在飞凌OK3588-C的Buildroot下查证GPIO64和gpiochip64的差异 2024/6/24 20:19 GPIOchip代表GPIO控制器的编号&#xff0c;gpio代表特定GPIO的引脚号 本文以linux R4/Buildroot位例子&#xff0c;同样适用于Android12和其他【使用linux内核的】操作系统。 https://www.ji…

java医院绩效考核系统源码:医院绩效考核的发展趋势、医院绩效考核的具体方法

java医院绩效考核系统源码&#xff1a;医院绩效考核的发展趋势、医院绩效考核的具体方法 医疗机构绩效考核是对医疗机构绩效进行评估和分析的一项重要工作。它对医疗机构的发展起到了重要的指导和推动作用。本文将会分析国际上医院绩效考核的发展趋势以及医院绩效考核的具体方…

MySQL中的Redo-log是什么?有什么作用?

用来实现数据的恢复&#xff0c;数据被更新到缓冲区但没刷磁盘&#xff0c;然后MySQL宕机了&#xff0c;MySQL会通过日志恢复数据。 1.为什么需要Redo-log日志&#xff1f; MySQL绝大部分引擎都是基于磁盘存储数据的&#xff0c;每次读写数据都走磁盘&#xff0c;效率十分低下…

qt图像处理-将OpenCV的cv::Mat类型转换为QImage类型

在使用Qt进行图像处理时&#xff0c;经常需要将OpenCV的cv::Mat类型转换为QImage类型。以下是几种有效的方法&#xff0c;可以根据具体情况选择合适的方法进行转换。 方法一&#xff1a;直接使用QImage构造函数 这种方法直接使用QImage的构造函数&#xff0c;通过传递cv::Mat…

AI绘画Stable Diffussion 实操教程: 真人图片秒变动漫风,亲手绘制你的专属动漫头像

大家好&#xff0c;我是向阳 你是否曾幻想过自己置身于动漫世界&#xff0c;拥有那些令人羡慕的二次元特征&#xff1f;随着人工智能技术的飞速发展&#xff0c;这一幻想已不再遥不可及。在本文中&#xff0c;我们将一起揭开Stable Diffusion技术的神秘面纱&#xff0c;探索如…

WebFlux 和 Spring Security 会碰出哪些火花?

项目创建成功后&#xff0c;我们添加一个接口&#xff0c;用来获取登录用户信息&#xff0c;如下&#xff1a; RestController public class UserController { GetMapping(“/user”) public Mono getCurrentUser(Mono principal) { return principal; } } 注意我们的返…

音频信号分析

目录 一&#xff0c;音频获取 二&#xff0c;信号的基本形态 三&#xff0c;衰减信号的频域信号 四&#xff0c;低频信号 五&#xff0c;高频信号 六&#xff0c;七个音节的频率 一&#xff0c;音频获取 我用电子琴&#xff08;音色模式是卧式钢琴&#xff09;&#xff…

Vue-Cli 创建vue2.0 + TypeScript 项目

这里写目录标题 一、创建项目名称二、选择 Manually select features三、勾选配置项四、选择vue版本五、其它配置 一、创建项目名称 vue create 项目名称&#xff08;项目名字不能含义大写字母&#xff09;二、选择 Manually select features &#xff08;按箭头上下进行移动…

Windows系统Maven下载安装

下载&#xff1a; 官网地址&#xff1a;https://maven.apache.org/download.cgi 安装&#xff1a; 下载下来的是一个压缩包&#xff0c;首先将其解压到你的Maven目标安装位置 接下来为其配置其环境变量 &#xff08;Maven的基础是Java&#xff0c;因此要首先确认已为你的电…

钡铼技术BL101串口6路Modbus转MQTT网关加速智慧城市部署

随着物联网技术的飞速发展&#xff0c;如何高效地整合传统设备与现代云端系统&#xff0c;成为了亟待解决的关键问题。钡铼技术&#xff0c;作为物联网领域的硬件设备制造商&#xff0c;近期推出的BL101六路串口Modbus转MQTT网关&#xff0c;正以其独特优势&#xff0c;为智慧城…

【FFmpeg】AVFrame结构体

【FFmpeg】AVFrame结构体 1.AVFrame结构体的定义enum AVPictureType pict_typeAVFrameSideData **side_data 参考&#xff1a; FFMPEG结构体分析&#xff1a;AVFrame 示例工程&#xff1a; 【FFmpeg】调用ffmpeg库实现264软编 【FFmpeg】调用ffmpeg库实现264软解 【FFmpeg】调…

【漏洞复现】脸爱云一脸通智慧管理平台 SystemMng 管理用户信息泄露漏洞(XVE-2024-9382)

0x01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大&#xff0c;运行稳定&#xff0c;操作简单方便&#xff0c;用户界面美观&#xff0c;轻松统计数据的一脸通系统。无需安装&#xff0c;只需在后台配置即可在浏览器登录。 功能包括:系统管理中心、人员信息管理中心、设备…

Mysql实战中的一些小tips

1. 问题&#xff1a;使用select进行查表&#xff0c;出现连接事务一直连接&#xff0c;导致锁表&#xff0c;没办法对表格进行修改操作。 解决办法&#xff1a; # 在建立conn连接时&#xff0c;设置commit如下&#xff1a;self.dbconn MySQLdb.connect(hostsql_conf.MYSQL_HO…

力扣(2024.06.24)

1. 68——文本左右对齐 给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往…

在WordPress上添加亚马逊联盟链接的三种方法

在互联网快速发展的今天&#xff0c;很多人都希望通过网络来增加收入&#xff0c;而加入亚马逊联盟计划&#xff08;Amazon Associates&#xff09;无疑是一个不错的选择。如果你有一个WordPress网站&#xff0c;那么在文章中添加亚马逊联盟链接是个很好的变现方式。今天&#…

倩女幽魂搬砖攻略:2024搬砖攻略大全!云手机强力辅助!

《倩女幽魂》手游是一款具有极高自由度和丰富玩法的角色扮演游戏。为了帮助玩家更好地了解并掌握游戏中的各种技巧和策略&#xff0c;本文将为大家提供详细的攻略指南。我们将从每日签到、任务升级、银两经营、必做活动和出金等多个方面详细介绍&#xff0c;帮助玩家轻松玩转游…

JAVA项目跑不起来

场景 项目报各种问题&#xff1a;要么application配置读取不到、要么项目结构不对、要么Idea InteliJ 的基础配置让重新配… 处理了一个问题&#xff0c;又有另一个问题… 但是&#xff0c;别人能跑起来。 原因 缓存问题。 解决办法 重新拉取项目&#xff0c;运行即可。