【发布时间】:2018-12-22 10:48:58
【问题描述】:
我想在多平台项目中创建一个类,并在Android版本中使用Parcelize使其成为Parcelable。
所以在我的lib-common 项目中,我尝试了:
expect annotation class Parcelize()
expect interface Parcelable
@Parcelize
data class Foo(x: Int): Parcelable
在我的lib-android 项目中:
actual typealias Parcelize = kotlinx.android.parcel.Parcelize
actual typealias Parcelable = android.os.Parcelable
第一个问题是Gradle插件kotlin-android-extensions好像没有接受lib-android的build.gradle,所以找不到包kotlinx.android.parcel。我设法通过直接导入库来解决这个问题:
implementation "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlin_version"
这样,Parcelable 的 actual 定义就可以编译了。
但是,我从Foo 的定义中得到一个错误,好像它没有用@Parcelize 正确注释:
类
Foo不是抽象的,也没有实现android.os.Parcelable中定义的抽象成员public abstract fun writeToParcel(p0: Parcel!, p1: Int): Unit
【问题讨论】:
标签: android kotlin parcelable kotlin-android-extensions kotlin-multiplatform