С предложением @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(data: Data)
и вызывать соответствующую функцию на основе значения контекста(т. е. 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
, он создает Processor
с данными контекста и помещает в пакет для нового activity 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
(который является экземпляром Processor
) будет иметь контекстную информацию и выбрать соответствующую предоставленную функциючерез класс TheHandler
птом module 1
х activity 1
.
fun doProcess(data: String) {
//somethinglike:
val processor: BaseProcessor? = arguments?.getParcelable(KEY_PROCESSOR_CONFIG)
processor?.doProcess(data)
}