尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

一行代码跳转Activity并传参:Longan的intentExtras属性委托实战指南

一行代码跳转Activity并传参:Longan的intentExtras属性委托实战指南 一行代码跳转Activity并传参Longan的intentExtras属性委托实战指南【免费下载链接】LonganProbably the best Kotlin utils library for Android. (可能是最好用的 Kotlin 工具库)项目地址: https://gitcode.com/gh_mirrors/lo/LonganLongan是一个号称可能是最好用的 Kotlin 工具库的 Android 开发库内置超过 500 个常用方法。它能让你一行代码跳转 Activity 并传参再配合intentExtras属性委托一行取出参数彻底告别冗长的 Intent 样板代码。本文手把手带你跑通这套完整流程。为什么需要 Longan 的 Intent 工具写 Android 的人都经历过这样的四行起步val intent Intent(this, SomeOtherActivity::class.java) intent.putExtra(id, 5) intent.setFlag(Intent.FLAG_ACTIVITY_SINGLE_TOP) startActivity(intent)每多传一个参数就要多写一行还容易拼错 key 名。Longan 把这些统统压缩成一行这就是它被推荐的核心原因 第一步跳转 Activity 并传参startActivity 一行流Longan 提供了泛型扩展函数startActivityT()第一个参数是目标 Activity后面跟着key to value参数对// 普通跳转零参数 startActivitySomeOtherActivity() // 跳转并传多个参数 startActivitySomeOtherActivity(id to 5, name to Longan) // 还能在 block 里追加 flag替代 setFlag 写法 startActivitySomeOtherActivity(id to 5) { singleTop() }singleTop()、newTask()、clearTask()这些都是 Longan 的Intent扩展函数语义一目了然不再需要记FLAG_ACTIVITY_XXX的长常量。 项目里就有现成示范sample/src/main/java/com/dylanc/longan/sample/ui/PictureActivity.kt中用伴生对象封装了start()方法团队里可以照抄这个套路统一跳转入口。相关实现位于longan/src/main/java/com/dylanc/longan/Activity.kt与longan/src/main/java/com/dylanc/longan/Intents.kt。第二步intentExtras 属性委托获取参数跳过去之后怎么优雅地取出参数传统写法是val id intent.getIntExtra(id, -1) val name intent.getStringExtra(name)Longan 用 Kotlin属性委托把取值变成声明一行class SomeOtherActivity : AppCompatActivity() { private val name: String? by intentExtras(name) // 可空参数 private val position: Int by intentExtras(position, 0) // 带默认值永不返回 null private val id: String by safeIntentExtras(id) // 人为保证必有值 }三种委托对应三种场景委托方式返回值适用场景by intentExtras(key)可空类型参数可能不传业务能容忍 nullby intentExtras(key, default)非空兜底默认值有合理默认值如列表位置 0by safeIntentExtras(key)非空缺失时崩溃参数是核心依赖缺失属逻辑错误源码拆解为什么能一行搞定intentExtras的定义非常短就在Intents.kt里fun T Activity.intentExtras(name: String) lazyT? { intent.extras[name] } fun T Activity.intentExtras(name: String, default: T) lazy { intent.extras[name] ?: default }两个关键设计泛型T类型由你声明的属性自动推断不需要写getIntExtra/getStringExtra一堆变体lazy延迟加载Activity初始化时不会立刻读intent.extras而是第一次访问该属性时才取值避开构造时序问题也省掉没用到参数的读取开销。一个完整实战示例以商品详情页为例从列表点击跳转并回读参数// 列表页点击某一项 adapter.doOnItemClick { item, position - startActivityGoodsDetailActivity(id to item.id, position to position) }// 详情页一行声明直接用 class GoodsDetailActivity : AppCompatActivity() { private val id: Long by safeIntentExtras(id) private val position: Int by intentExtras(position, 0) // 业务里直接 this.id 即可 }全程没有任何putExtra/getXxxExtra调用跳转和取值各一行 ✅延伸Fragment 传参同理这套委托模式在 Fragment 上完全对称Longan 提供了同名的arguments家族// 创建时带参数 val fragment SomeFragment().withArguments(id to 5) // Fragment 内取参数 private val id: Long by safeArguments(id)掌握 Activity 的intentExtrasFragment 的arguments等于零成本迁移。常见问题 FAQQ1key 写错了会怎样用intentExtras时拿到 null 或默认值用safeIntentExtras时会直接崩溃并提示No intent value for key xxx——后者更适合必传参数把错误暴露在开发期。Q2可以传 Bundle 吗可以Longan 还提供intentOfT(bundle)与intentOfT(vararg pairs)两个入口复杂参数可以先用bundleOf(...)组装再传入。Q3想查完整 API 去哪看建议阅读docs/usage/intents.mdIntents 用法文档和docs/apis/commonapis.md中的 Intents 章节里面还有拨号、发短信、分享图片等现成函数配合本文用法可覆盖绝大多数 Intent 场景。小结需求Longan 一行写法跳转并传参startActivitySomeActivity(id to 5)取可空参数by intentExtras(name)取带默认值参数by intentExtras(position, 0)取必传参数by safeIntentExtras(id)追加启动 flagstartActivitySomeActivity(id to 5) { singleTop() }从四行起步到一行搞定Longan 的属性委托把 Intent 传参变成了声明式写法。无论是新手理解 Activity 通信还是老手清理存量代码这套startActivityintentExtras组合都值得直接搬进项目。【免费下载链接】LonganProbably the best Kotlin utils library for Android. (可能是最好用的 Kotlin 工具库)项目地址: https://gitcode.com/gh_mirrors/lo/Longan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表