【发布时间】:2018-08-29 05:56:15
【问题描述】:
我在 Kotlin 中有一个数据类,它使用 @Parcelize 注释来轻松打包。问题是我现在想将一个函数传递给这个类,但我真的不知道如何在打包过程中不考虑该函数。
这是我的数据类:
@Parcelize
data class GearCategoryViewModel(
val title: String,
val imageUrl: String,
val categoryId: Int,
val comingSoon: Boolean,
@IgnoredOnParcel val onClick: (gearCategoryViewModel: GearCategoryViewModel) -> Unit
) : DataBindingAdapter.LayoutViewModel(R.layout.gear_category_item), Parcelable
我尝试使用@IgnoredOnParcel 和@Transient 没有成功。
这是我得到的编译错误:
错误:(20, 39) 'Parcelize' 不直接支持类型。如果您希望使用 'writeValue()' 对其进行序列化,请使用 '@RawValue' 注释参数类型
而且这个@RawValue注解也不起作用。
【问题讨论】:
-
我现在想将一个函数传递给这个类你需要什么以及你想要实现什么
-
@Raghunandan 我希望这个类接收一个函数的实现,以便它可以通过数据绑定来执行它。但我也需要这个类是可分割的,所以它的数据可以发送到其他活动等。
-
用title、imageUrl、categoryId 和comingSoon 创建另一个对象然后使这个对象Parcelable 并将这个相同的对象传递给您的viewModel 可能会更有用。
data class GearCategoryViewModel(val someObject: parcelableObject, val onClick: (gearCategoryViewModel: GearCategoryViewModel) -> Unit)这样您就不会尝试序列化Function。
标签: android lambda kotlin kotlin-android-extensions