When I use Intent
to pass a Parcelable
object from Activity A to Activity B, B activity getExtra is null. Following my code:
class A(var id: Int, var name: String,var bList:MutableList<B>) : Parcelable {
override fun writeToParcel(p0: Parcel, p1: Int) {
p0.writeInt(id)
p0.writeString(name)
p0.writeTypedList(bList)
}
override fun describeContents(): Int {
return 0
}
constructor(parcel: Parcel) : this(
parcel.readInt(),
parcel.readString(),
parcel.createTypedArrayList(B.CREATOR)
)
companion object CREATOR : Parcelable.Creator<A> {
override fun createFromParcel(parcel: Parcel): A {
return A(parcel)
}
override fun newArray(size: Int): Array<A?> {
return arrayOfNulls(size)
}
}
}
class B
class B(var id: Int, var name: String, var a: A) : Parcelable {
constructor(parcel: Parcel) : this(
parcel.readInt(),
parcel.readString(),
parcel.readParcelable(A::class.java.classLoader))
override fun writeToParcel(p0: Parcel, p1: Int) {
p0.readInt()
p0.readString()
p0.readParcelable<A>(A.javaClass.classLoader)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<B> {
override fun createFromParcel(parcel: Parcel): B {
return B(parcel)
}
override fun newArray(size: Int): Array<B?> {
return arrayOfNulls(size)
}
}
}
I use intent to pass data:
val list = mutableListOf<B>()
val a = A(1,"A",list)
val b1 = B(1,"B1",a)
val b2 = B(2,"B2",a)
list.add(b1)
list.add(b2)
val intent = Intent()
intent.setClass(context, AboutActivity::class.java)
intent.putExtra("frank",a)
startActivity(intent)
I am using following code to retrieve data:
val bundle = intent.extras
val a:A = bundle.getParcelable("frank")
Is this data structure a dead loop when write Parcelable?