Вы не можете. Потому что вы не можете сериализовать 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
, при условии, что ключ является String
, а значение «известный» тип объекта (включает Serializable
и Parcelable
). Так что вы можете просто сделать это:
public void writeToParcel(Parcel out, int flags){
out.writeValue(map);
}
private MyParcelable(Parcel in){
map = (Map)in.readValue(getClass().getClassLoader());
}
См. https://developer.android.com/reference/android/os/Parcel.html#writeValue(java.lang.Object) для списка "известных" типов объектов.
ПРИМЕЧАНИЕ: Вы всегда получите HashMap
, если вы позвоните Parcel.getValue()
на Map
. Android глуп по этому поводу и предполагает, что все Map
s HashMap
s.