std*_*out 5 sealed parcelable android-intent kotlin
我有类似下面的内容,我想将它们作为意图参数传递;
sealed class BasketType : Parcelable {
class BasketOne(val basketId: String): BasketType() {
constructor(parcel: Parcel) : this(parcel.readString()) {
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
super.writeToParcel(parcel, flags)
parcel.writeString(basketId)
}
override fun describeContents(): Int {
return 0
}
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误;
不能直接访问抽象成员
就在super.writeToParcel(parcel, flags)预料之中。
我四处寻找解决方法,但找不到。有任何想法吗?
Adn*_*aki 31
如果你想@parcelize在sealed class,这样做:
sealed class AssistantType : Parcelable{
@Parcelize data class Dashboard(
val firstName: String,
val hasGoal: Boolean,
val hasOverDuePayment: Boolean
) : AssistantType()
@Parcelize data class Detail(
val firstName: String,
val isGoalAchived: Boolean
) : AssistantType()
}
Run Code Online (Sandbox Code Playgroud)
并将以下代码添加到您的 App Level gradle 中。
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
androidExtensions {
experimental = true
}
Run Code Online (Sandbox Code Playgroud)
您只需忽略该super呼叫即可。该函数没有超级实现,这就是它抱怨的原因。
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeString(basketId)
}
Run Code Online (Sandbox Code Playgroud)
该super调用之所以存在,是因为 android studio 的代码生成将其放在那里,而没有检查它是否确实可能。
| 归档时间: |
|
| 查看次数: |
5544 次 |
| 最近记录: |