根据@EpicPandaForce和@nPn的建议,使用bundle传递上下文。
这里是想法,希望有人有更好的方法,谢谢!
在里面
module 2
,定义派生自的基本处理器类:
open class BaseProcessor() : Parcelable {
open fun doProcess(data: Data){}
// parceable stuff below
/......
}
在里面
module 1
使用处理函数创建一个类
class TheHandler() {
func_1 (data: Data) {
}
func_2 (data: Data) {
}
}
制造
Processor
派生自BaseProcessor(可以有一些要序列化的基本数据,因此它很小),并重写
doProcess(data: Data)
,
它将实例化一个
TheHandler
当
doProcess(数据:数据)
调用,并根据上下文值调用适当的函数(即
var which: Int
)
class Processor (var which: Int) : BaseProcessor {
override fun doProcess(data: Data) {
val handler = TheHandler()
when (which) {
1 -> {
handler.func_1(data)
}
2-> {
hanlder.func_2(data)
}
}
}
// parcelable stuff
// ... ...
override fun writeToParcel(out: Parcel, flags: Int) {
super.writeToParcel(out, flags)
out.writeInt(this.which)
}
companion object {
@JvmField
val CREATOR: Parcelable.Creator<Processor> = object : Parcelable.Creator<Processor> {
override fun createFromParcel(parcel: Parcel): Processor {
return Processor(parcel)
}
override fun newArray(size: Int): Array<Processor?> {
return arrayOfNulls(size)
}
}
}
}
什么时候发射
activity 2
,它构建了
加工机
使用上下文数据,并将其放入新
活动2
fun launch_activity_2 (which: Int) {
var processor = Processor (which)
// put processor in the bundle
args.putParcelable(KEY_PROCESSOR_CONFIG, processor)
// launching the activity_2 from module_2 with the bundle passed in
// ...
}
在模块2的活动2中,它希望从包中取出一个BaseProcessor并调用函数
doProces()
还有
processor
(这是
加工机
)将具有上下文信息,并通过
泰汉德勒
来自
单元1
是的
activity 1
.
fun doProcess(data: String) {
//somethinglike:
val processor: BaseProcessor? = arguments?.getParcelable(KEY_PROCESSOR_CONFIG)
processor?.doProcess(data)
}