compose navigation 自定义navtype

Compose | UI组件(十五) | Navigation-Args - 类型安全导航参数实践 本文深入探讨了Jetpack Compose中Navigation-Args的类型安全导航参数实践,详细介绍了内置NavType的使用、自定义复杂类型参数传递以及多模块项目中的解决方案。通过编译时检查确保参数安全,显著减少运行时错误,提升开发效率。文章还涵盖了与ViewModel的配合使用、性能优化及常见问题处理,为开发者提供全面的导航参数最佳实践。 阅读详情

Jetpack compose navigation with custom NavType

https://www.youtube.com/watch?v=qBxaZ071N0c&t=182s

定义两个路由

@Serializable
data object DogListRoute

@Serializable
data class DogDetailRoute(
    val dog: Dog,
    val breedSize: BreedSize
)

即两个页面,一个狗列表页面,点击列表项,进入狗详情界面。

大部分情况下,我们应该是传狗的ID,然后在狗详情界面,通过查询本地数据库or API,去获取狗详情信息。

但是这里演示一个自定义的数据类型,通过navtype来传递。

可以看到 DogDetailRoute带了两个参数,一个是自定义类型Dog。另一个是枚举类型 BreedSize

@Serializable
data class Dog(
    val id: Int,
    val name: String,
)

enum class BreedSize {
    SMALL,
    MEDIUM,
    LARGE
}

序列化需要引入

plugin
jetbrains-kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }

implementation

kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version = "1.6.3" }

通过自定义navtype可以方便的在导航过程中,传递自定义参数

                         composable<DogListRoute> {
                            DogListScreen(
                                onDogClick = { dog, breedSize ->
                                    navController.navigate(
                                        DogDetailRoute(
                                            dog = dog,
                                            breedSize = breedSize
                                        )
                                    )
                                }
                            )
                        }
                        composable<DogDetailRoute>(
                            typeMap = mapOf(
                                typeOf<Dog>() to CustomNavType.DogType,
                                typeOf<BreedSize>() to NavType.EnumType(BreedSize::class.java)
                            )
                        ) {
                            val arguments = it.toRoute<DogDetailRoute>()
                            DogDetailScreen(
                                dog = arguments.dog,
                                breedSize = arguments.breedSize
                            )
                        }
navController.navigate 直接放入带自定义参数的 route,在接收端,通过 toRoute直接获取组装后的带自定义参数的route,但是前提条件是,需要注册号typeMap

 typeMap = mapOf(
                                typeOf<Dog>() to CustomNavType.DogType,
                                typeOf<BreedSize>() to NavType.EnumType(BreedSize::class.java)

通过CustomNavType.DogType告诉navigator怎么对dog进行转换

object CustomNavType {

    val DogType = object : NavType<Dog>(
        isNullableAllowed = false
    ) {
        override fun get(bundle: Bundle, key: String): Dog? {
            return Json.decodeFromString(bundle.getString(key) ?: return null)
        }

        override fun parseValue(value: String): Dog {
            return Json.decodeFromString(Uri.decode(value))
        }

        override fun serializeAsValue(value: Dog): String {
            return Uri.encode(Json.encodeToString(value))
        }

        override fun put(bundle: Bundle, key: String, value: Dog) {
            bundle.putString(key, Json.encodeToString(value))
        }
    }
}

其中 使用URI编码主要用于将URI中的特殊字符转化为一种通用的格式

Compose | UI组件(十四) | Navigation-Data - 页面导航传递数据 在 Compose 中使用 Navigation 组件进行页面跳转时,可以使用 NavController 和 NavHost 来传递参数。改为。将?改为,如果没有传值,程序就会崩溃,默认是必填的,?默认是选填的},},@Parcelize{ //从Bundle中检索 Parcelable类型override fun parseValue(value: String): T { //定义传递给 String 的 Parsing 方法。 阅读详情

相关推荐

Compose | UI组件(十五) | Navigation-Data - 高效传递复杂数据的页面导航实践

本文深入探讨了在Jetpack Compose Navigation中高效传递复杂数据的实践方法。针对电商等场景中传递商品对象等结构化数据的需求,文章详细介绍了如何通过自定义NavType集成Parcelable对象,实现类型安全且优雅的页面间数据传递,并涵盖了集合、嵌套对象处理及性能优化等最佳实践。

weixin_29230649的博客 303

Compose版本的Navigation组件的使用

在原生中,官方比较推荐使用单Activity+多Fragment模式来构建一个APP,而Fragment的切换需要使用FragmentManager来进行管理,比如add replace等方法,对于开发者来说,也是比较繁琐,于是官方在Jetpack组件中就是推出了Navigation的库,可以方便开发者快速去管理多Fragment的页面堆栈问题

m0_56255097的博客 2865

Jetpack Compose实战:3种高效页面传参方式对比(含ViewModel与Parcelable)

本文深入解析Jetpack Compose中三种高效页面传参方式(直接参数传递、ViewModel传参和Parcelable对象传递),对比其实现细节、性能表现及适用场景。通过实战案例和性能优化建议,帮助开发者在不同业务需求下选择最优方案,提升Android应用开发效率。

weixin_42542669的博客 378

Jetpack: 使用自定义 NavType 组合导航

上述方式在大多数情况下都有效。您只需传递 id,然后从数据库中获取附加信息。但有时您只想将数据传递到另一个屏幕而不做额外的请求。Jetpack 导航组件允许我们创建自定义 NavType。NavType表示可以在 a 中使用的类型NavArgument。假设我们想将自定义的Post数据类型传递给 ScreenB我们可以创建一个“Post NavType”,Post 必须首先是可包裹的。@Parcelize然后我们可以创建 PostType 类{}}}}

Android_XG的博客 517

【navigation】compose中的navigation导航详解:(二)如何传递参数

【navigation】compose中的navigation导航详解:(二)如何传递参数

qq_39317095的博客 2286

从入门到进阶:Jetpack Compose 之 Navigation导航组件深度详解(Material 3 版)

Jetpack Compose Navigation组件提供了声明式的导航管理方案,通过NavController、NavHost和NavGraph三大核心组件实现页面跳转和状态管理。最新版本支持类型安全路由,使用Kotlin序列化替代传统字符串路由,提高了开发效率和安全性。实现过程包括:1)配置导航库和序列化插件;2)定义@Serializable路由对象;3)创建可组合屏幕组件;4)构建NavHost容器管理导航图;5)在Activity中初始化导航控制器。该方案采用单Activity架构,组件解耦设计

郭宝的博客 472

Jetpack Compose使用navigation实现页面导航与参数传递

简单一个dmeo搞清如何使用navigation实现页面之间的跳转与参数传递。

派小汤的博客 724

CZT与FFT频谱分析方法对比:从任意频带重采样到高精度频谱分析

M = 85 % 输出点数f0 = 70 Hz % 起始频率DELF = 0.4 Hz % 频率步长频率分辨率提高到0.4 Hz分析带宽聚焦在[70, 103.6]Hz更清晰地分辨出78Hz和82Hz的频率分量。

2403_88098319的博客 1860

Compose导航避坑指南:为什么你的Parcelable参数总传失败?附完整解决方案

本文深入解析Jetpack Compose中Navigation组件传递Parcelable参数的常见问题,包括数据丢失、类型转换异常等,并提供完整的解决方案。通过自定义NavType实现、安全参数传递方法和优化建议,帮助开发者高效解决Compose页面导航中的数据传递难题。

5b6n7m8的博客 104

Windows NPS与华为、华三、思科设备RADIUS认证实战指南

本文详细介绍了Windows NPS与华为、华三、思科设备RADIUS认证的实战配置指南。通过NPS服务器统一管理网络设备认证,实现企业级安全访问控制,涵盖基础配置、设备对接及故障排查方法,助力管理员提升网络安全管理效率。

weixin_29284201的博客 505

不用公网IP,如何在内网高效搭建RustDesk远程控制服务器?基于Windows Server 2019的完整实践

本文详细介绍了在Windows Server 2019上部署RustDesk远程控制服务器的完整实践方案,无需公网IP即可实现内网高效远程控制。从环境准备、基础服务安装到网络与安全配置,提供了零成本的私有化部署指南,适用于企业、校园等内网环境。

weixin_28737073的博客 455

Jetpack篇之 Compose Navigation 全指南

本文全面介绍了Jetpack Compose Navigation在现代Android应用开发中的核心应用。主要内容包括:1. 基础配置:解析NavController、NavGraph等核心组件,展示导航图的创建流程;2. 参数传递:详解路径参数、查询参数等三种传递方式及类型安全实现方案;3. 高级特性:涵盖嵌套导航、深层链接和自定义动画等进阶功能;4. 最佳实践:提供状态管理、重组优化及与Hilt集成的解决方案。文章强调Compose Navigation通过声明式API简化了导航逻辑,相比传统方式具有

weixin_37794278的博客 1573

Appstore开发者必读:3.2(f)违规预警与高效申诉指南

本文为AppStore开发者提供了应对3.2(f)违规通知的完整指南。文章深度解析了3.2(f)条款下的隐瞒性、关联性与真实性违规类型,并提供了黄金48小时内的自查、申诉信撰写与提交全流程策略。同时,文章强调遵循App Review Guidelines,建立内部合规清单与保持账号独立,是预防违规、维护开发者账号安全的关键。

weixin_29214559的博客 273

Jetpack Compose实战:Navigation传参的3种高效方式对比(附完整代码)

本文深入对比了Jetpack Compose中Navigation组件进行页面导航时传递数据的三种高效方式:基础路由参数、ViewModel状态共享以及自定义NavType序列化复杂对象。通过分析各自的实现细节、性能表现与适用场景,并结合完整代码示例,旨在帮助开发者构建更健壮、可维护的Android应用导航架构。

weixin_29288313的博客 127

保姆级教程:手把手教你用CANoe/CANalyzer读取汽车故障码(UDS 0x19服务实战)

本文提供了一份详细的CANoe/CANalyzer使用教程,指导如何通过UDS 0x19服务读取汽车故障码。从硬件配置到报文构建,再到故障码解析,手把手教你完成汽车诊断全流程,特别适合汽车电子工程师和诊断开发人员。

weixin_42524945的博客 261

YOLO26涨点改进 | 全网首发Conv独家改进篇 | CVPR 2025 | YOLO26引入FDConv频率动态卷积改进,含FDC3k2二次创新,小目标检测,能够捕捉更加丰富和复杂的特征信息

本文提出了一种频率动态卷积(FDConv)模块,用于改进YOLO26目标检测模型的性能。FDConv通过在傅里叶域内划分参数预算,构建具有频率多样性的权重,有效提升了模型对低频和高频信息的处理能力。该模块包含内核空间调制(KSM)和频率带调制(FBM)两个关键组件,分别实现空间级和频域级的动态调节。实验表明,FDConv仅增加3.6M参数就能超越其他需要大幅增加参数的方法,并在目标检测、实例分割等任务中表现优异。文章详细介绍了FDConv的原理、实现方法及在YOLO26中的集成方式,提供了完整的代码实现。

Ai缝合怪、助力小伙伴高效发论文 250

Compose Navigation 类型安全与多模块解耦实战:从字符串路由到导航契约

在Jetpack Compose应用开发中,导航架构的设计直接关系到项目的可维护性与扩展性。传统基于字符串模板的路由方式,在页面数量增长和多模块协作场景下,会暴露出参数类型不安全、路由散落、模块依赖混乱等隐患。类型安全导航通过注解与数据类将路由建模为强类型对象,使编译器能够提前捕获参数错误,并将模块间的跳转关系显式化,从而驱动架构向深度解耦演进。多模块工程中,通过定义导航契约接口与统一路由注册中心,可有效避免循环依赖,实现模块间仅依赖契约而非具体实现。这一套方法论适用于普通页面跳转、底部Tab切换、Deep

weixin_29000991的博客 213

MATLAB点云处理总目录

点云处理研究学习

weixin_44329757的博客 2556

Jetpack Compose类型安全导航:Compose Destinations 2.x实战指南

在Android应用开发中,页面导航是架构设计的关键一环。Jetpack Compose 虽然提供了 Navigation-Compose 组件,但字符串路由和手动传参的方式在项目复杂度提升后暴露出类型安全缺失、样板代码繁多等痛点。基于注解处理器与 KSP 的编译期代码生成技术,能够将路由定义与参数解析自动化,从根本上提升导航的健壮性与可维护性。这种思路适用于大型项目中的底部导航、对话框、深链跳转以及依赖注入等典型场景。本文围绕 Compose Destinations 2.x 展开,系统讲解其核心注解、导

weixin_33824385的博客 337

timing window file中的S L T指什么意思

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 776

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Jetpack Compose Navigation 遇上类型安全

Host—— 在您的布局中显示当前“目标”(destination)的 UI 元素。Graph—— 定义应用程序中所有可能的目标的数据结构。Controller—— 管理目标之间导航并保存目标的后向堆栈的中央协调器。Kotlin DSL 只是构建导航图的一种方式。手动构造 NavGraph 实例并添加目标(例如 Fragment 目标)以构建图。从导航 XML 文件中膨胀您的图,并手动编辑它或通过导航编辑器进行编辑。使用 Kotlin DSL 直接在 Kotlin 代码中构建导航图。

虎哥LoveDroid 1064

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Jetpack Compose 的 Navigation学习

Navigation是 Jetpack 用于 Android 导航的组件,作用是处理页面跳转,以及页面跳转过程中的交互。使用Navigation,你就需要为每个页面设定一条唯一路径,它是一个 String 常量,形式是 DeepLink 的样子,从一个页面跳转到另一个页面,它通过输入目的地的路径进行转跳。Navigation也支持上 Compose,我们可以在 Compose 中使用它来进行跳转。因为官网和所看到的demo都是把它作为跳转能力使用,所以不清楚 Compose 是否还有别的跳转方式….....

RikkaTheWorld 2129

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Navigation Compose 完整精讲

<think>我们只需要根据内容生成摘要,≤150字。内容是关于Navigation Compose的讲解,包括基础概念、参数传递等。摘要要概括核心要点:导航组件、NavController、NavHost、路由、参数传递(路径参数、Query参数、SavedStateHandle)、返回栈管理、深层链接等。语言简洁。 注意字数限制,150字以内。</think>摘要:本文讲解Navigation Compose导航组件,核心概念包括NavController、NavHost、路由及composable注册

jacky choise 188

一文搞懂在 Compose 中使用 Navigation 导航 | 开发者说·DTalk

本文原作者: 黄林晴,原文发布于:Android技术圈使用 Navigation 在 Compose 中导航如果您之前不喜欢 Android 提倡的 "单 Activity" 应用,那么在 Compose 中相信您会慢慢习惯的~在此示例中,有两个页面 PageOne 和 PageTwo,首先来看 PageOne 的代码如下所示:@Composable fun Page...

Android开发者 1943

Compose的Navigation(十五)

文章目录一、前言二、依赖三、NavHostController四、NavBackStackEntry五、路由跳转六、路由传参七、深度链接八、参考链接 一、前言 之前用写过一版Navigation,不过现在Compose中也对Navigation做了兼容。新的Navigation导航更加灵活,可以实现组件之间的切换, 所以这里也对navigation-compose做下简单的记录。关于之前的Navigation,可以参考以下链接: https://blog.youkuaiyun.com/Mr_Tony/article/d

Mr_Tony的专栏 3590

Compose-router vs Navigation Compose:单Activity导航的5大核心差异与Appyx迁移指南

compose-router 是一个面向 Jetpack Compose 的**单 Activity 导航路由库**,用 Compose 组合(而非 XML 导航图)映射整个 App 结构,并自带多级后向栈(back stack)、返回键处理和作用域状态持久化。它的官方继承者 Appyx 如今已是该领域的正统方案,因此本文将它和 Google 官方的 Navigation Compose 逐一拆解

gitblog_00480的博客 930
上一篇: 关于Android12以上的闪屏兼容
下一篇: kmp desktop实现excel预览
lynn8570_blog
博客等级 码龄10年 254粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值