原文地址: 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对象调用即可

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

Android 优雅的Activity回调代码封装的更多相关文章

  1. android:Android 6.0权限控制代码封装

    新建的Activity类可以继承这个Activity,这个类封装了关于新版的权限处理相关的代码 使用方法: package com.glsite.phone; import android.conte ...

  2. android中RecycleView分页原生代码封装,无任何第三方代

    概述 RecycleView分页加载封装,简单方便,功能齐全 详细 代码下载:http://www.demodashi.com/demo/13283.html 一.场景: 在项目开发中经常使用到列表集 ...

  3. [Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络)

    [Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络) 地址:http://www.eoeandroid.com/thre ...

  4. Android 写一个Activity之间来回跳转的全局工具类(主要是想实现代码的复用)

    废话不多说了,直接上代码,相信大家都能看得懂的. 一.主要工具类 package com.yw.chat.utils; import android.app.Activity; import andr ...

  5. 深入了解Promise对象,写出优雅的回调代码,告别回调地狱

    深入浅出了解Promise 引言 正文 一.Promise简介 二.Promise的三种状态 三.函数then( ) 四.函数catch( ) 五.函数finally( ) 六.函数all( ) 七. ...

  6. Android四大组件——Activity

    Activity作为Android四大组件之一,也是其中最重要的一个组件.作为一个与用户交互的组件,我们可以把Activity比较成为windows系统上的一个文件夹窗口,是一个与用户交互的界面.再进 ...

  7. JAVA回调函数ANDROID中典型的回调地方

    在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序. 在JAVA里面我们使用接口的方式来实现函数的回调. 回调的通俗就是:程序 ...

  8. Android中的Activity

    Android四大组件 活动(Activity) 广播接收者(BroadCastReceiver) 服务(Service) 内容提供者(Contentprovider) Activity 先来看And ...

  9. 浅析android系统设计中的回调思想

    一.为何写作本文  在慢慢深入接触android开发的过程中,我越来越发现android中(至少应用曾的开发)用到了很多回调的思想.比如activity的生命周期,fragment的生命周期,皆是回调 ...

  10. Android组件系列----Activity组件详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

随机推荐

  1. 微软Bing正面对阵谷歌!竞标争夺Firefox默认搜索引擎

    在今早的谷歌I/O大会上,谷歌带来了全新的PaLM 2人工智能语言模型,并将用该模型升级Bard对话机器人以及谷歌搜索. 但面对来势汹汹的谷歌,微软似乎并不打算退却. 根据The Informatio ...

  2. Qt processEvents - 解决线程中事件阻塞(如槽函数被阻塞)

    百度了一会,发现没太有文字讲这件事情,因此整理成文字记录一下. processEvents介绍 长时间运行的操作可以调用processEvents() 保持应用程序响应能力. void QCoreAp ...

  3. 17.5 稀疏调拨的内存映射文件--《Windows核心编程》

    原文链接:https://www.likecs.com/show-306421749.html,原文中代码是C++MFC程序,更详细.本文是C语言测试代码. (1)稀疏文件(Sparse File)定 ...

  4. 【解决方案】Java 互联网项目如何防止集合堆内存溢出(一)

    目录 前言 一.代码优化 1.1Stream 流自分页 1.2数据库分页 1.3其它思考 二.硬件配置 2.1云服务器配置 三.文章小结 前言 OOM 几乎是笔者工作中遇到的线上 bug 中最常见的, ...

  5. spring boot整合mybatis-plus报错:There is no getter for property named ‘ew‘ in ‘xxx‘

    问题说明 spring boot整合mybatis-plus报错:There is no getter for property named 'ew' in 'xxx' 问题解决 XXXmapper. ...

  6. 关于动态抽样(Dynamic Sampling)

    关于动态抽样(Dynamic Sampling) 原文:http://www.oracle.com/technetwork/issue-archive/2009/09-jan/o19asktom-08 ...

  7. 美团面试:Kafka如何处理百万级消息队列?

    美团面试:Kafka如何处理百万级消息队列? 在今天的大数据时代,处理海量数据已成为各行各业的标配.特别是在消息队列领域,Apache Kafka 作为一个分布式流处理平台,因其高吞吐量.可扩展性.容 ...

  8. windows 程序启动后挂到后台

    开发中遇到一个问题,程序启动后,并没有出现在前台,而是自动挂到后台,程序处于卡死状态,基本任何模块都没加载进来. 后面排查发现跟一个功能的第三方 dll 有关系,在那个 dll 加载时导致程序卡死,因 ...

  9. cronet 的简单学习

    官方的解释 "Cronet is the networking stack of Chromium put into a library for use on mobile. This is ...

  10. 统信UOS系统开发笔记(五):安装QtCreator开发IDE中的中文输入环境Fcitx输入法

    前言   中文输入法,QtCreator中无法输入中文也是ubuntu中一个常规问题,在国产银河麒麟系统中也有此问题(PS:最终无法结局,用文本自行贴),国产UOS也有此问题,本片要解决此问题,主要是 ...