我还没有找到关于stackoverflow的正确答案,并且对如何为Map实现正确的Parcelable实现感到困惑。
我想下面的Map
public void writeToParcel(Parcel out, int flags){
out.writeInt(map.size());
for(Map.Entry<String,String> entry : map.entrySet()){
out.writeString(entry.getKey());
out.writeString(entry.getValue());
}
}
private MyParcelable(Parcel in){
//initialize your map before
int size = in.readInt();
for(int i = 0; i < size; i++){
String key = in.readString();
String value = in.readString();
map.put(key,value);
}
}
但是Map
答案 0 :(得分:1)
不能。因为您无法将Object
序列化为Parcel
。如果有问题的Object
implements Parcelable
,您可以执行以下操作:
public void writeToParcel(Parcel out, int flags){
out.writeInt(map.size());
for(Map.Entry<String,Parcelable> entry : map.entrySet()){
out.writeString(entry.getKey());
entry.getValue().writeToParcel(out, flags);
}
}
private MyParcelable(Parcel in){
//initialize your map before
int size = in.readInt();
for(int i = 0; i < size; i++){
String key = in.readString();
Parcelable value = in.readParcelable(getClass().getClassLoader());
map.put(key,value);
}
}
方法:您不需要这样做,因为Parcel
类已经知道如何序列化和反序列化Map
,前提是密钥是{{ 1}},并且该值是“已知”对象类型(包括String
和Serializable
)。因此,您可以执行以下操作:
Parcelable
有关“已知”对象类型的列表,请参见https://developer.android.com/reference/android/os/Parcel.html#writeValue(java.lang.Object)。
注意::如果您在public void writeToParcel(Parcel out, int flags){
out.writeValue(map);
}
private MyParcelable(Parcel in){
map = (Map)in.readValue(getClass().getClassLoader());
}
上致电HashMap
,则会得到Parcel.getValue()
。 Android对此很愚蠢,并假设所有Map
都是Map
。