Kotlin 1.3.50 Parcelize 未解决的引用错误

Kotlin 1.3.50 Parcelize unresolved reference error

使用我的第一个 android 应用程序,kotlin 1.3.50。我最初实现了 Parcelable,但切换到 parcelize,然后添加了枚举。这是我的数据 class

package com.igniterobotics.scouting_2019.Models

import android.os.Parcel
import android.os.Parcelable
import com.igniterobotics.scouting_2019.Enums.Movement
import com.igniterobotics.scouting_2019.Enums.Preload
import com.igniterobotics.scouting_2019.Enums.StartingPosition

@Parcelize
data class AutonResult(var hatchCount: Int, var cargoCount: Int, 
      var intakeDrop: Int, var itemDrops: Int, var startingPosision: StartingPosition, 
      var preload: Preload, var movement: Movement
)

一个问题提到 build.gradle 中的插件顺序作为问题的来源。这是我的

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

知道为什么我的@Parcelize 无法解析吗?

您需要添加

androidExtensions {
        experimental = true
    }

在您应用的 build.gradle

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
       ....
    }
    buildTypes {
        release {
            ...
        }
    }

    androidExtensions {
        experimental = true
    }
}

如果您在 2021 年仍然遇到此问题,可以按照此操作

不要忘记 Kotlin 中的 Parcelize 功能是 kotlin-android-extensions 编译器插件的一部分,因此删除该插件最终会使所有依赖于 Parcelize 的 Parcelable 类 无法编译注解。 JetBrains 从 Kotlin 提取 Parcelize Android 扩展到新插件,

kotlin-parcelize

首先,您需要将 kotlin-parcelize 插件添加到您的模块。

plugins {
    ..
    id 'kotlin-parcelize'
}

然后将您的旧导入语句从

更改为
import kotlinx.android.parcel.Parcelize

import kotlinx.parcelize.Parcelize

示例

    import kotlinx.parcelize.Parcelize
    import android.os.Parcelable

    @Parcelize
    class User(val name: String, val age: Int): Parcelable

more