在一个实现了Parcelable接口的类中,有一个HashMap成员。
看到Parcelable有public final void readMap(Map outVal, ClassLoader loader)
方法,但找不到使用它的示例。
如果通过扁平化映射并相应地逐个写/读,如何在构造函数中从包裹中提取?(从可包裹对象构建映射时出错,cannot access buildTheMap() before constructor is called
)
class CachedData(val type: Int,
val name: String,
val details: HashMap<String, String) :
Parcelable {
constructor(parcel: Parcel) : this(
parcel.readInt(),
parcel.readString(),
// how to get the hashMap out of the parcel???
buildTheMap(parcel) //<=== cannot access buildTheMap() before constructor is called
)
fun buildTheMap(parcel: Parcel) :HashMap<String, String> {
val size = parcel.readInt()
val map = HashMap<String, String>()
for (i in 1..size) {
val key = parcel.readString()
val value = parcel.readString()
map[key] = value
}
return map
}
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeInt(type)
parcel.writeString(name)
// how to write the HashMap<String, String> to the parcel
//parcel.???
parcel.writeInt(details.size)
for ((key, value) in details) {
parcel.writeString(key)
parcel.writeString(value)
}
}
override fun describeContents(): Int {
return 0
}
companion object {
@JvmField val CREATOR: Parcelable.Creator<CachedData> = object : Parcelable.Creator<CachedData>{
override fun createFromParcel(parcel: Parcel): CachedData {
return CachedData(parcel)
}
override fun newArray(size: Int): Array<CachedData?> {
return arrayOfNulls(size)
}
}
}
}
final void readMap(Map outVal, ClassLoader loader)
的示例。 - lannyf