android - @Parcelize 在多平台项目中
问题描述
我想在一个多平台项目中创建一个类,并在 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
's build.gradle
,所以kotlinx.android.parcel
找不到包。我设法通过直接导入库来解决这个问题:
implementation "org.jetbrains.kotlin:kotlin-android-extensions-runtime:$kotlin_version"
有了这个,编译的actual
定义。Parcelable
但是,我从 的定义中得到一个错误Foo
,好像它没有正确注释@Parcelize
:
类
Foo
不是抽象的,也没有实现public abstract fun writeToParcel(p0: Parcel!, p1: Int): Unit
定义的抽象成员android.os.Parcelable
解决方案
嗯,这有点尴尬,但我发现问题仅仅是因为我忘记打开 的实验功能kotlin-android-extensions
,其中之一是@Parcelize
......
因此,为了让它发挥作用,将我的expected
和actual
定义保留在问题中就足够了,Parcelable
并Parcelize
编辑lib-android
并build.gradle
添加以下行:
apply plugin: 'kotlin-android-extensions'
androidExtensions {
experimental = true
}
无需dependencies
添加;那是一个死胡同的方向。
推荐阅读
- condor - HTCondor:如何在平行宇宙中等到所有作业都完成?ParallelShutdownPolicy 不起作用
- excel - 如何编写 VBA/使用返回某个日期和单元格颜色内的单元格数量的命令链?
- powershell - 如何在 PowerShell 脚本中导入 CSV 文件?
- c++ - 如何修复我的 C++ 脚本中的运行时错误
- events - 当数据到达过期时间时向 RabbitMQ 发布事件
- arrays - 按组将 SAS 中的空值替换为下一个可用值
- r - 通过 R 中的部分匹配合并两个数据帧
- angular - MatAutocompleteTrigger 不适用于响应数据
- javascript - Apple Pay 界面在移动 Safari 上重定向后冻结页面
- sockets - Linux内核中的TCP/IP——控制套接字关闭超时