0

I have two open classes BaseNfcCard and SomeObjectNfcCard. Here SomeObjectNfcCard extends BaseNfcCard and Parcelable, also BaseNfcCard extends Parcelable.

When I pass SomeObjectNfcCard to another activity, I have data only from it and not from BaseNfcCard. Is this my code issue or lib?

@Parcelize
open class BaseCard(
        var cardId: String = "",
        var id: String = "",
        var type: Int = NfcFieldsHelper.UNDEFINED
) : Parcelable

@Parcelize
open class ObjectCard(
        var date: String = "",
        var objectState: Int = STATE_UNDEFINED,
        var managerId: String = "",
        var lastUpdate: String = "",

        var plombs: ArrayList<String> = ArrayList()
) : BaseCard(), Parcelable

Pass data to intent

private fun onCardParsed(result: ObjectCard) = startActivity(Intent(this,
        CardReadyActivity::class.java)
        .putExtra(CardReadyActivity.CARD_DATA, result))

Take data from intent

private lateinit var card: ObjectCard
card = intent?.extras?.getParcelable(CardReadyActivity.CARD_DATA)!!
Anton A.
  • 1,718
  • 15
  • 37

1 Answers1

1

This is actually documented in Parcelize:

Note that only the primary constructor properties will be serialized.

https://github.com/JetBrains/kotlin/blob/master/plugins/android-extensions/android-extensions-runtime/src/kotlinx/android/parcel/Parcelize.kt#L24

But judging by their test cases, composition should work:

@Parcelize
class ObjectCard(
        var baseCard: BaseCard,
        var date: String = "",
        var objectState: Int = 2,
        var managerId: String = "",
        var lastUpdate: String = "",
        var plombs: ArrayList<String> = ArrayList()
)
Alexey Soshin
  • 16,718
  • 2
  • 31
  • 40