ActivityMessenger,借助Kotlin特性,简化Activity之间传参和回调的逻辑代码。
博客详情: https://blog.csdn.net/u011387817/article/details/99844066
唠叨:
在日常开发中,每次使用startActivityForResult时,要做的事情都超级多:
-
定义一个
RequestCode
; -
重写
onActivityResult
并在这里判断RequestCode
和ResultCode
; -
如果有携带参数,还要一个个通过
putExtra
方法put
进Intent里; -
目标Activity处理完成后还要把数据一个个
put
进Intent中,setResult
然后finish
; -
如果参数是可序列化的泛型类对象(如ArrayList<Model>),取出来的时候不但要显式强制转型,还要把 UNCHECKED_CAST 警告抑制;
在饱受这些繁琐折磨之后,便诞生出了ActivityMessenger。
它有以下特点:
-
startActivityForResult
不用另外定义RequestCode
; -
跟其他库一样,
startActivityForResult
不用重写onActivityResult
方法,也不用判断RequestCode
和ResultCode
; -
startActivity
如有携带参数不须一个个调用putExtra
方法; -
从Intent中取出数据时,无须调用对应类型的方法,如
getStringExtra()
、getIntExtra()
、getSerializableExtra()
等; -
如果参数是可序列化的泛型类对象(如ArrayList<Model>),取出来的时候不用强制转型,也没有可怕的 UNCHECKED_CAST 警告了;
示例:
startActivity:
方式1(假设TestActivity
是要启动的Activity):
//不携带参数
ActivityMessenger.startActivity<TestActivity>(this)
//携带参数(可连续多个键值对)
ActivityMessenger.startActivity<TestActivity>(this, "Key" to "Value")
方式2(假设TestActivity
是要启动的Activity):
//不携带参数
ActivityMessenger.startActivity(this, TestActivity::class)
//携带参数(可连续多个键值对)
ActivityMessenger.startActivity(
this, TestActivity::class,
"Key1" to "Value",
"Key2" to 123
)
startActivityForResult:
方式1(假设TestActivity
是要启动的Activity):
//不携带参数
ActivityMessenger.startActivityForResult<TestActivity>(this) {
if (it == null) {
//未成功处理,即(ResultCode != RESULT_OK)
} else {
//处理成功,这里可以操作返回的intent
}
}
//携带参数同startActivity。
方式2(假设TestActivity
是要启动的Activity):
//不携带参数
ActivityMessenger.startActivityForResult(this, TestActivity::class) {
if (it == null) {
//未成功处理,即(ResultCode != RESULT_OK)
} else {
//处理成功,这里可以操作返回的intent
}
}
//携带参数同startActivity。
finish:
//退出并设置参数
ActivityMessenger.finish(this, "Key1" to "Value1", "Key2" to 2)
getExtras(获取Intent参数):
方式1
//预先声明好类型
var mData: List<String>? = null
mData = intent.get("Key1")
方式2
//取出时再决定类型
val result = intent.get<String>("Key2")
方式3
// 使用委托
val key3 by extraAct("key3", "test")
var key4: String? by extraAct("key4")
使用方式:
添加依赖:
implementation 'com.wuyr:activitymessenger:1.0.3'