Search code examples
android-intentkotlinparcelablesealed

Making sealed class hierarchy Parcelable


I have something similar like the following where I want to pass them around as intent arguments;

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
        }

        ...
    }

    ...
}

But I get the following error;

Abstract member cannot be accessed directly

on the line super.writeToParcel(parcel, flags) which is kind of expected.

I've looked around for a workaround but could not find one. Any ideas?


Solution

  • You simply leave out the super call. There is no super implementation of that function, which is why it's complaining.

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeString(basketId)
    }
    

    the super call is only there because the code generation of android studio puts it there without checking that it's actually possible.