问题描述
我在应用程序的类中实现 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