首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android Parcelable in Kotlin

Android Parcelable in Kotlin
EN

Stack Overflow用户
提问于 2016-01-10 08:54:43
回答 2查看 4.2K关注 0票数 10

我有这样的Java parcelable:

代码语言:javascript
运行
复制
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
    public KwerendaGraficzna createFromParcel(Parcel in) {
        return new KwerendaGraficzna(in);
    }

    public KwerendaGraficzna[] newArray(int size) {
        return new KwerendaGraficzna[size];
    }
};

现在尝试在Kotlin中实现它:

代码语言:javascript
运行
复制
companion object {
    @SuppressWarnings("rawtypes")
    val CREATOR: Parcelable.Creator<KwerendaGraficzna!> = object : Parcelable.Creator<KwerendaGraficzna!> {
        override fun createFromParcel(`in`: Parcel): KwerendaGraficzna {
            return KwerendaGraficzna(`in`)
        }

        override fun newArray(size: Int): Array<KwerendaGraficzna!> {
            return arrayOfNulls<KwerendaGraficzna!>(size)
        }
    }
}

arrayOfNulls声称它收到了KwerendaGraficzna?时,它不会编译需要KwerendaGraficzna

那我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-10 09:27:34

我怀疑您使用的是Kotlin编译器的过时版本(因为您使用了!)。下面是一个用最新版本正确编译的版本:

代码语言:javascript
运行
复制
companion object {
    @JvmField
    val CREATOR = object : Parcelable.Creator<KwerendaGraficzna> {
        override fun createFromParcel(`in`: Parcel): KwerendaGraficzna {
            return KwerendaGraficzna(`in`)
        }

        override fun newArray(size: Int): Array<KwerendaGraficzna?> {
            return arrayOfNulls(size)
        }
    }
}

因为Parcelable.Creator需要一个公共静态字段,所以我们需要用@JvmFieldJvmStatic标记CREATOR属性。

票数 16
EN

Stack Overflow用户

发布于 2020-12-02 10:01:35

您不需要实现所有样板代码。

相反,

代码语言:javascript
运行
复制
@Parcelize
data class KwerendaGraficzna(val a: Int, val b: String): Parcelable{
    // TODO: others code
}

就这样。

您需要启用experimentaltruebuild.gradle中应用上述方法。

代码语言:javascript
运行
复制
android{
    compileSdkVersion 30
    
    defaultConfig{
        applicationId "com.example"
        minSdkVersion 25
        targetSdkVersion 30
        ...
    }

    ...

    androidExtensions {
        experimental = true
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34703680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档