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

Compose-Navigation简单案例上手

Navigation 快速上手

下面案例简要展示使用 Compose 版本的 Navigation 库来实现两个页面之间的跳转

这是完整的结构(忽略掉红线划过的那个包)

在这里插入图片描述


安装适用于 kotlin 的 navigation 依赖

dependencies {implementation("androidx.navigation:navigation-compose:2.4.1")
}

编写欲跳转的两个页面

编写 Demo1 页面

子页面使用多个 composable 组件相组合的方法一一装配起来

Demo1main 渲染整个页面,他接受一个 NavController 对象,用于操纵导航相关的方法

可以注意到 Button 里面的点击事件还没写,后续我们写好路由后再回来编写跳转逻辑

@Composable
fun Demo1main(navController: NavController) {body(navController)
}@Composable
private fun body(navController: NavController) {Column(modifier = Modifier.fillMaxSize()) {Button(onClick = {// 跳转逻辑}) {Text(text = "前往demo2",modifier = Modifier.fillMaxWidth(),textAlign = TextAlign.Center)}}
}

编写 Demo2 页面

依葫芦画瓢

@Composable
fun Demo2main(navController: NavController) {body(navController)
}@Composable
private fun body(navController: NavController) {Column(modifier = Modifier.fillMaxSize()) {Button(onClick = {// 这里也写跳转逻辑!}) {Text(text = "前往demo1",modifier = Modifier.fillMaxWidth(),textAlign = TextAlign.Center)}}
}

路由表配置

编写单例类 RouteConfig 用来存储路由名称(等同于 vue-router 中我们设置的 path)

后续为便于理解,统称为 path

object RouteConfig {// 主页面const val ROUTE_MAIN = "main"// 两个跳转页面const val ROUTE_DEMO1 = "demo1"const val ROUTE_DEMO2 = "demo2"
}

总路由

创建文件 MainNav 并在里面实现路由导航的总逻辑

由于我们刚刚入门,路由表可以很简单,按照以下结构即可

  1. rememberNavController 存储所有 navcontroller 状态
  2. NavHost 一个容器,便于内部页面的切换,在里面注册所有页面
@Composable
fun AppNav() {// 存储navigation状态val navController = rememberNavController()// navhost容器// startDestination表示起始页的path,这里我们指定demo1作为起始页NavHost(navController = navController, startDestination = RouteConfig.ROUTE_DEMO1) {// 依次传入path并注册三个页面composable(RouteConfig.ROUTE_MAIN) {MainActivity()}composable(RouteConfig.ROUTE_DEMO1) {Demo1main(navController)}composable(RouteConfig.ROUTE_DEMO2) {Demo2main(navController)}}
}

主页面调用总路由

对于 kotlin 而言,非常简单,直接调用定义好的总路由方法即可

因为总路由默认起始页为 demo1,故渲染 mainactivity 后就会立即载入 demo1 页面!

class MainActivity() : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {DemoComposeTheme {// A surface container using the 'background' color from the themeSurface(modifier = Modifier.fillMaxSize(),color = MaterialTheme.colors.background) {// 一键调用,方便快捷AppNav()}}}}
}

跳转逻辑完善

嘿!还记得我们之前置空的按钮跳转逻辑吗?

我们已经配置完了所有路由,为此,仅需将以下代码添加到按钮点击事件即可跳转到指定页面了!

// 写于demo1页面,点击按钮后跳转到demo2页面
navController.navigate(RouteConfig.ROUTE_DEMO2)

为便于大家理解,现给出 demo1.kt 目前的完整代码

@Composable
fun Demo1main(navController: NavController) {body(navController)
}@Composable
private fun body(navController: NavController) {Column(modifier = Modifier.fillMaxSize()) {Button(onClick = {navController.navigate(RouteConfig.ROUTE_DEMO2)}) {Text(text = "前往demo2",modifier = Modifier.fillMaxWidth(),textAlign = TextAlign.Center)}}
}

demo2 的跳转逻辑只需要修改对应的 path 即可

目前仅学到了最简单的 navigate 跳转,后续还有带参跳转,请关注进阶版本!


相关文章:

Compose-Navigation简单案例上手

Navigation 快速上手 下面案例简要展示使用 Compose 版本的 Navigation 库来实现两个页面之间的跳转 这是完整的结构(忽略掉红线划过的那个包) 安装适用于 kotlin 的 navigation 依赖 dependencies {implementation("androidx.navigation:navigati…...

855. 考场就座

题目 考场就座 在考场里,一排有 N 个座位,分别编号为 0, 1, 2, …, N-1 。 当学生进入考场后,他必须坐在能够使他与离他最近的人之间的距离达到最大化的座位上。如果有多个这样的座位,他会坐在编号最小的座位上。(另外&#xf…...

k8s之ingress(二)

文章目录k8s之ingress1.1、Kubernetes 暴露服务的方式:1.2 基本概念1.3为什么需要Ingress资源1.4 Ingress的工作原理1.5ingress 暴露服务的方式总结k8s之ingress 1.1、Kubernetes 暴露服务的方式: Kubernetes暴露服务的方式目前只有三种:LoadBlancer Service、Nod…...

linux下监测串口数据

在编写上下位机通信代码时,需要分阶段测试,确保下位机,线路,上位机都OK. 一.检查设备数据传出 1.确定下位机的串口参数 如果波特率有问题,可能会…...

【面试之闭包】前端面试那些事(2)三分钟深入理解闭包(附详解实例)

目录1、什么是闭包,什么是作用域1.1 变量作用域1.2 闭包是啥?如何改变变量调用格局1.3 闭包的特性2、怎么用闭包,闭包实例应用2.1 常见闭包实例2.2 闭包异步函数的应用2.3 柯里化的应用3、闭包的优缺点3.1 优点3.2 缺点4、片尾彩蛋【写在前面…...

深入浅出带你学习WebSphere中间件漏洞

前言 上一篇文章给大家介绍了中间件glassfish的一些常见漏洞以及利用方法,今天我给大家带来的是WebSphere中间件的常见漏洞以及这些漏洞的利用方法,下面我们首先介绍一下WebSphere中间件是什么,然后展开来讲关于该中间件的漏洞。 WebSphere…...

如何一眼分辨是C还是C++

C语言的历史C语言是由贝尔实验室的Dennis Ritchie在20世纪70年代初开发的一种通用程序设计语言。在早期的计算机时代,许多计算机使用不同的汇编语言编写程序,这导致了程序的可移植性和代码的可重用性很低。因此,Dennis Ritchie在开发C语言时试…...

CMake系列:正确使用多配置编译系统

目录 常见错误 问题现象 正确做法 if指令应该什么时候使用 活学活用 把IF指令用于多配置编译系统是很多初学者容易犯下的错误。这篇文章启示性的教你如何正确理解、使用CMake的多配置编译系统。 常见错误 以Debug和Release配置有不同的宏定义为例,如下所示&a…...

PCB中的HDI板生产中的变化

关键词:HDI概述 HDI发展演变 HDI生产难点如果把一整个电子产业比作浩瀚的宇宙,那些智能电子设备就像宇宙中闪耀的星光,当你以“上帝”的视角手持放大镜去观察时,这些闪烁的星光点点其实都是一个个由精密的“自然规律”所“设计”好…...

程序分析与神经网络后门

原文来自微信公众号“编程语言Lab”:程序分析与神经网络后门 搜索关注“编程语言Lab”公众号(HW-PLLab)获取更多技术内容! 欢迎加入编程语言社区 SIG-程序分析,了解更多程序分析相关的技术内容。 加入方式:…...

redis主从哨兵模式

一.为什么用redis主从模式 1.数据备份:主从复制实现数据的热备份。 2.故障恢复:当主节点出现问题时,由从节点提供服务,实现快速恢复。 3.负载均衡:读写分离,主节点提供写服务,从节点提供读服务。在写少读多时提高Redis的并发。 二.为什么使用哨兵模式 主要用于主节…...

Spring 系列之 MVC

Spring 系列文章目录 文章目录Spring 系列文章目录前言一、介绍二、项目搭建1.创建空项目2.设置maven和lombok3.创建maven web module4. 配置Tomcat启动运行项目(选择local本地)5. 导入jar依赖包6.在web.xml中配置DispatcherServlet7. 加入SpringMVC的配…...

电子技术——分立CS和CE放大器的低频响应

电子技术——分立CS和CE放大器的低频响应 我们之前在学习放大器中从来没有关系过信号频率对放大器的影响,也就是说我们默认放大器具有无限的带宽,这当然不符合现实逻辑。为了说明这一点,我们使用下图: 上图描述了MOS或BJT分立电路…...

代码随想录【Day16】| 104. 二叉树的最大深度、111. 二叉树的最小深度、222. 完全二叉树的节点个数

104. 二叉树的最大深度 题目链接 题目描述: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7]&#xff0c…...

状态机图、通信图题

1.下列关于通信图与顺序图中的对象的相同点的叙述.正确的是(D)。A.两种图中都可以表示对象的创建和销毁B.对象在两种图中的位置都没有任何限制C.对象在两种图中的表示方式完全一致D.对象名在两种图中的表示完全一致2.下列关于通信图的说法错误的是(C)。A.通信图是对一次交互过程…...

分布式文件存储Minio学习入门

文章目录一、分布式文件系统应用场景1. Minio介绍Minio优点2. MinIO的基础概念、3. 纠删码ES(Erasure Code)4. 存储形式5. 存储方案二、Docker部署单机Minio三、minio纠删码模式部署四、分布式集群部署分布式存储可靠性常用方法冗余校验分布式Minio优势运行分布式minio使用dock…...

handler解析(4)-Message及Message回收机制

Message中可以携带的信息 Message中可以携带的数据比较丰富,下面对一些常用的数据进行了分析。 /*** 用户定义的消息代码,以便当接受到消息是关于什么的。其中每个Hanler都有自己的命名控件,不用担心会冲突*/ public int what; /*** 如果你…...

Linux使用定时任务监控java进程并拉起

需求描述: 设计一个脚本,通过Linux定时任务,每分钟执行一次,监控jar包进程是否存在,存在则不做动作,不存在则重新拉起jar包程序。 定时任务配置: */1 * * * * bash -x /root/myfile/jars/che…...

Win 10电脑摄像头提示错误代码0xa00f4244怎么办?

如果你的Windows 10电脑无法打开摄像头,提示“我们找不到你的摄像头”的错误消息,错误代码是0xA00F4244,原因可能是杀毒软件阻止了摄像头,或者是摄像头驱动程序有问题。 小编为你整理了摄像头错误代码0xA00F4244的解决方法&#…...

MFC消息机制

1.消息映射消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个鼠标左击消息,MFC将搜索该窗口的消息映射,如果存在一个处理WM_LBUTTTONDOWN消息的处理程序,然后就调用OnButtonDown。2.消息映射机制2.1 声明宏 写…...

全国计算机等级考试报名照片要求以及证件照制作教程

马上就全国计算机等级考试就要开始了,相信现在很多同学都在网上进行报名呢,报名的时候肯定需要用到个人证件照片,所以问题来了,我们怎么自己制作证件照片呢?计算机等级考试报名时对证件照都有哪些要求呢?该…...

SQLSERVER 临时表和表变量到底有什么区别?

一:背景 1. 讲故事 今天和大家聊一套面试中经常被问到的高频题,对,就是 临时表 和 表变量 这俩玩意,如果有朋友在面试中回答的不好,可以尝试看下这篇能不能帮你成功迈过。 二:到底有什么区别 1. 前置思…...

技术生态异军突起,昇思MindSpore进入AI框架第一梯队

ChatGPT掀起的新一轮人工智能狂欢下,隐藏在背后的“大模型”正进入越来越多开发者的视野。 诚如几年前开始流行的一种说法:数据是燃料、模型是引擎、算力是加速器。ChatGPT的出现,恰如其分地诠释了数据、模型和算力的“化学反应”。而在其中…...

审批流、工作流、业务流

是业务流、工作流、审批流 业务流:即业务流程,指为了完成某项业务而进行的各种工作的有序组合 工作流:即工作流程,指为了完成某项工作而进行的各种动作的有序组合 审批流:即审批流程,是对某项工作的审批活动…...

如何利用知识库加强内部管理?

许多公司都知道需要有一个面向客户的知识库,以加强客户服务,提供更好的客户体验。 但是很多企业没有意识到的是,拥有一个内部知识库软件对于员工改善沟通和促进知识共享的重要性。 协作是组织成功的关键部分,通过明确的远景和使…...

饕餮 NFT 作品集来袭!

饕餮 NFT 作品集包含 Chili Game 创作的体验《饕餮》第一章中的角色。可以在 The Sandbox 农历新年活动期间(01/18/23 至 02/28/23)体验。 饕餮的故事植根于中国古代神话,主要灵感来自《山海经》,一个关于捉妖人「青蛙侠」的故事。…...

C++中的内存分区、引用、函数

内存分区模型 代码区 存放CPU执行的机器指令代码区是共享的且具有只读性 全局区 全局变量和静态变量都存放在此处全局区还包括了常量区、字符串常量和其他常量也存放在此该区域的数据在程序结束后由操作系统释放const修饰的局部变量并不算在全局区 栈区 由编译器自动分配和释放…...

关于angular表格total模板中一直为0

哈喽 小伙伴们大家好昨天在用angular得antdesign组件得table表格 我用total模板 结果&#xff0c;total一直为0这可是愁坏我了 <ng-template #totalTemplate let-total>找到 {{ total }} 条结果</ng-template>[nzShowTotal]"totalTemplate"最后找到原因了…...

多线程事务怎么回滚

背景介绍1&#xff0c;最近有一个大数据量插入的操作入库的业务场景&#xff0c;需要先做一些其他修改操作&#xff0c;然后在执行插入操作&#xff0c;由于插入数据可能会很多&#xff0c;用到多线程去拆分数据并行处理来提高响应时间&#xff0c;如果有一个线程执行失败&…...

基于FPGA的时间数字转换(TDC)设计(五:基于Carry4的高精度TDC设计)

1.基于Carry4进位链设计原理 常见的基于FPGA开发的TDC有直接计数法,多相位时钟采样法,抽头延迟线法等,之前内容为基于多相位的TDC,本章节中,主要讲解基于抽头延迟线法。在Xilinx FPGA开发中,实现抽头延迟线法有很多种,如使用IODELAY构建延迟进位链,此处将介绍基于Carr…...

在那些网站可以接兼职做/seo排名关键词点击

background: linear-gradient(to bottom, #000000 0%,#ffffff 100%);&#xff08;标准&#xff09;linear-gradient 在 ie9 以下是不支持的&#xff0c;所以对于 ie6 - ie8 我们可以使用滤镜来解决。如下代码&#xff1a;filter: progid:DXImageTransform.Microsoft.gradient(s…...

做网站点/广告公司的业务范围

简评&#xff1a;Java var ! JavaScript var。 Java 10 中引入了新的语法用于局部变量类型推断&#xff0c;很多开发者有所疑惑&#xff0c;希望这篇文章能帮到你。 什么是类型推断 其实在 Java 中类型推断早就存在了&#xff0c;看下下面的例子&#xff1a; public void doSom…...

门户网站建设与推广方案/汽车营销活动策划方案

本质上&#xff0c;这很可能是坏块引发的&#xff0c;所以需要调查 关联的Table 中的坏块状况&#xff1a; Excerpt of trace file *** 2017-08-18 09: 23: 04.323 dbkedDefDump (): Starting incident default dumps (flags 0x2, level 3, mask 0x0) [TOC00009] ----- Cur…...

做的比较好的b2b网站/磁力链 ciliba

在本视图中&#xff0c;每一个连接到数据库实例中的 session都拥有一条记录。包括用户 session及后台进程如 DBWR&#xff0c; LGWR&#xff0c; arcchiver等等。 V$SESSION中的常用列 V$SESSION是基础信息视图&#xff0c;用于找寻用户 SID或 SADDR。不过&#xff0c;它也有一…...

做政府网站哪家公司好/seo优化网站的注意事项

Redis SET 命令手册1. 可选项2. 返回值3. 历史变化4. 案例5. 模式从Redis 1.0.0 起可用 时间复杂度&#xff1a;O(1) 设置 key 以保存字符串 value。如果 key 已经保存了一个 value&#xff0c;则无论其类型如何&#xff0c;都会覆盖该值。成功的 SET 操作将丢弃与该键任何以前…...

抖音团购小程序代理/百度关键词优化企业

“视频已发布到哔哩哔哩&#xff0c;点击阅读原文可以直接到达&#xff0c;求个三连不过分吧&#xff01;uniapp基础部分有文档还看什么教程&#xff1f;官网文档非常的详细&#xff0c;但是如果没有接触过的新人看文档其实是没法学的&#xff0c;因为他不知道要完成一个开发&a…...