Android 优雅的Activity回调代码封装

这篇具有很好参考价值的文章主要介绍了Android 优雅的Activity回调代码封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原文地址: Android 优雅的Activity回调代码封装 - Stars-One的杂货小窝

之前提到Jetpack架构组件学习(3)——Activity Results API使用 - Stars-One的杂货小窝来替换我们常用的startActivityForResult,但实际上,虽然说是解耦合了,但写法确实有些繁琐

最近迭代项目空闲了研究些,没想到同事已经封装好了(还帮他测出一个bug,之后也是修复了),就记录下

PS:以下代码已封装在我的库中stars-one/XAndroidUtil: 封装自己常用的一些Android的组件或工具,可以直接依赖使用

代码

下面代码直接复制到一个文件里即可,因为是扩展方法

private val nextLocalRequestCode = AtomicInteger()

private val nextKey: String
    get() = "activity_rq#${nextLocalRequestCode.getAndIncrement()}_starsone"

/**
 * Activity启动并回调数据(不用再写onActivityResult方法里接收数据)
 */
fun ComponentActivity.startActivityForResult(
    intent: Intent,
    result: (ActivityResult) -> Unit
) {
    var launcher by Delegates.notNull<ActivityResultLauncher<Intent>>()
    launcher = activityResultRegistry.register(
        nextKey,
        ActivityResultContracts.StartActivityForResult()
    ) {
        result.invoke(it)
        launcher.unregister()
    }
    lifecycle.addObserver(object : LifecycleEventObserver {
        override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
            if (event == Lifecycle.Event.ON_DESTROY) {
                launcher.unregister()
                lifecycle.removeObserver(this)
            }
        }
    })
    launcher.launch(intent)
}

至于代码如何得到到,实际上也是翻源码翻出来的,具体的我就没有细究了,似乎是Activity Results AP有提供不和生命周期一起绑定使用的方法来着

使用的话就Activity对象调用即可文章来源地址https://www.toymoban.com/news/detail-776794.html

startActivityForResult(Intent()){
    val resultCode = it.resultCode
    if (resultCode==Activity.RESULT_OK) {
        val dataIntent = it.data
        //你的逻辑
    }
}

到了这里,关于Android 优雅的Activity回调代码封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Activity之间数据回传【Android、activity回传、结合实例】

    在Android应用中,有时需要从一个Activity向另一个Activity传递数据,并在第二个Activity处理后将结果传递回第一个Activity。 这种情况下,我们可以使用 startActivityForResult() 和 onActivityResult() 方法来实现数据回传。 创建新的Android项目: 打开Android Studio并创建一个新的Android项目,确

    2024年02月08日
    浏览(43)
  • C 语言高级3--函数指针回调函数,预处理,动态库的封装

    目录 1.函数指针和回调函数 1.1 函数指针 1.1.1 函数类型 1.1.2 函数指针(指向函数的指针) 1.1.3 函数指针数组        1.1.4 函数指针做函数参数(回调函数)  2.预处理 2.1 预处理的基本概念 2.2 文件包含指令(#include) 2.2.1 文件包含处理  2.2.2 #incude和#include\\\"\\\"区别 2.3 宏定义 2.3.1 无参

    2024年02月14日
    浏览(38)
  • Android Activity启动流程一:从Intent到Activity创建

    关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 学习前,建议有相关知识储备: 【Android 基础】 应用(Application)启动流程 通过本文你可以学习到Activity启动流

    2024年02月10日
    浏览(44)
  • Android Activity的启动流程(Android-10)

    在Android开发中,我们经常会用到startActivity(Intent)方法,但是你知道startActivity(Intent)后Activity的启动流程吗?今天就专门讲一下最基础的startActivity(Intent)看一下Activity的启动流程,同时由于Launcher的启动后续和这里基本类似,就记录在一起。注意本章都是基于Android-10来讲解的。

    2024年01月17日
    浏览(45)
  • Android --- Activity

    官方文档-activity Activity 提供窗口,供应在其中多个界面。此窗口通常会填满屏幕,但也可能小于屏幕并浮动在其他窗口之上。 大多数应用包含多个屏幕,这意味着它们包含多个 Activity。通常,应用中的一个 Activity 会被指定主 Activity,即用户启动应用时显示的第一个屏幕。然

    2024年04月23日
    浏览(69)
  • [Android 四大组件] --- Activity

    ​​Activity​​是一个Android的应用组件,它提供屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口,窗口可以充满哦屏幕也可以小于屏幕并浮动在其他窗口之上。 一个应用通常是由多个彼此松散联系的Activity组成,一般会指定应用中的某个Activity为主活动,也

    2024年02月10日
    浏览(42)
  • 微信支付APIV3统一回调接口封装(H5、JSAPI、App、小程序)

    😊 @ 作者: 一恍过去 💖 @ 主页: https://blog.csdn.net/zhuocailing3390 🎊 @ 社区: Java技术栈交流 🎉 @ 主题: 微信支付统一回调接口封装(H5、JSAPI、App、小程序) ⏱️ @ 创作时间: 2022年07月12日 对微信支付的H5、JSAPI、H5、App、小程序支付方式进行统一,此封装接口适用于普通商户

    2024年02月08日
    浏览(44)
  • Android Activity 动画如何实现

    在 Android 中,你可以使用 Activity 转场动画来实现 Activity 之间的切换动画效果。以下是一些常见的 Activity 转场动画的实现方法: 1. 使用 XML 文件定义动画效果: 首先,在 res/anim 目录下创建 XML 文件来定义你的动画效果。例如,你可以创建 fade_in.xml 和 fade_out.xml 文件来定义淡入

    2024年02月09日
    浏览(47)
  • Android 后台启动Activity适配

    在Android 9及以下版本,后台启动Activity相对自由,但是如果在Activity上下文之外启动Activity会有限制。 所以此时需要给intent添加flag:FLAG_ACTIVITY_NEW_TASK。 在Android版本10及以后版本, 引入了后台执行限制,限制了应用在后台执行操作的能力。非核心任务的后台启动 Activity 可能会

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包