Android/Kotlin:parcelable 的问题

问题描述

我在应用程序的类中实现 Parcelable 时遇到了一些问题。这是用 Kotlin 编写的。我有一个叫做 CocktailRecipe 的类,它有你所期望的 - 名称、描述等。它还有一个两个列表和一个地图。成分和设备也是自定义类。我不知道如何对这些进行分割 - 我发现的所有信息都与 Java 相关,例如使用 parcelreadValue(this.getClass().getClassLoader()) 但我找不到与此等效的 Kotlin。我还在包裹的构造函数生成了一堆 Todo 注释,但我无法找到任何关于应该在它们的位置上放置什么的信息。这是课程的开始 - 任何人都可以指出我正确的方向吗? TIA。

class CocktailRecipe(
        recipeName: String?,recipeImage: Int,recipeBlurb: String?,recipeDesc: String?,recipEquipment: MutableList<Equipment>,recipeIngredients: MutableMap<Ingredient,Int>,recipeInstructions: MutableList<String>
)  {
    var name = recipeName
    var image = recipeImage
    var blurb = recipeBlurb
    var description = recipeDesc
    var equipment = recipEquipment
    var ingredients = recipeIngredients
    var instructions = recipeInstructions
    var isFavourite = false
    var rating = 0

    // methods etc.

}

解决方法

试试这个

@Parcelize
data class CocktailRecipe(
        recipeName: String?,recipeImage: Int,recipeBlurb: String?,recipeDesc: String?,recipEquipment: MutableList<Equipment>,recipeIngredients: MutableMap<Ingredient,Int>,recipeInstructions: MutableList<String>
)
,

您可以使用 kotlin-parcelize - 这是一个提供 Parcelable 实现生成器的插件

首先将 kotlin-parcelize 添加到您的模块

plugins {
    ..
    id 'kotlin-parcelize'
}

现在您可以使用适用于您的情况的代码

@Parcelize
class CocktailRecipe(
    recipeName: String?,recipeInstructions: MutableList<String>
): Parcelable  {
    var name = recipeName
    var image = recipeImage
    var blurb = recipeBlurb
    var description = recipeDesc
    var equipment = recipEquipment
    var ingredients = recipeIngredients
    var instructions = recipeInstructions
    var isFavourite = false
    var rating = 0

    // methods etc.

}

@Parcelize
class Equipment(
    var1: String?,var2: String?
    
) : Parcelable

@Parcelize
class Ingredient(
    var1: String?,var2: String?
): Parcelable

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...