Android 如何在kotlin multiplatform或其任何替代方案中使用Bundle

Android 如何在kotlin multiplatform或其任何替代方案中使用Bundle,android,kotlin,callback,bundle,kotlin-multiplatform,Android,Kotlin,Callback,Bundle,Kotlin Multiplatform,我有一个项目要使用kotlin multiplatform用于我们的业务逻辑,所以我将java代码转换为kotlin。但我不能再调用Bundle,也不能导入android.os.Bundle。 我可以在Kotlin多平台中使用捆绑包的任何替代方案 爪哇 转换成Kotlin interface RequestCallback { fun receivedCallbackFromRequest(request: BaseRequest , result: Bundle) } 一般来说,我会

我有一个项目要使用kotlin multiplatform用于我们的业务逻辑,所以我将java代码转换为kotlin。但我不能再调用Bundle,也不能导入android.os.Bundle。 我可以在Kotlin多平台中使用捆绑包的任何替代方案

爪哇

转换成Kotlin

interface RequestCallback {
    fun receivedCallbackFromRequest(request: BaseRequest , result: Bundle)
}

一般来说,我会把
Bundle
s排除在KMP之外,因为它们主要用于View层,如果您尝试在平台之间共享视图层逻辑,您将遇到各种此类问题。 如果您也在非视图层上使用
捆绑包
,我会说创建一个简单的
映射
,并将其映射到Android视图层上的
捆绑包

如果您想继续使用android.os.Bundle,我会为它创建一个多平台的抽象:

expect class Bundle {
    fun putInt(int: Integer)
    ....
}
现在,您仍然需要为其他平台定义它,具体取决于您的目标

同样,您进入平台特定层的次数越多,您的生活就越艰难,尤其是使用视图层。
不过,您可以通过共享
ViewModel
而逃脱,它仍然提供了一个不错的共享代码百分比。请参见

A Bundle基本上是一个
MutableMap
,其中
getInt()
等函数从映射中获取字符串值并将其转换为Int。当然有其他方法,但为什么需要它们?
expect class Bundle {
    fun putInt(int: Integer)
    ....
}
actual typealias Bundle = android.os.Bundle