package com.example.sampleapp.app; import android.graphics.Bitmap; import android.os.Parcel; import android.os.Parcelable; import java.util.HashMap; import java.util.Map; public class MapParcelable implements Parcelable { private final Map<String, String> sampleMap; private final Map<Long, Bitmap> mapWithParcelableValues; private MapParcelable(Map<String, String> sampleMap, Map<Long, Bitmap> mapWithParcelableValues) { this.sampleMap = sampleMap; this.mapWithParcelableValues = mapWithParcelableValues; } public static MapParcelable create() { HashMap<String, String> stringMap = new HashMap<String, String>(); stringMap.put("a", "b"); HashMap<Long, Bitmap> bitmapMap = new HashMap<Long, Bitmap>(); bitmapMap.put(1L, Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888)); return new MapParcelable(stringMap, bitmapMap); } public Map<String, String> getSampleMap() { return sampleMap; } public Map<Long, Bitmap> getMapWithParcelableValues() { return mapWithParcelableValues; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(this.sampleMap.size()); for (Map.Entry<String, String> entry : this.sampleMap.entrySet()) { dest.writeString(entry.getKey()); dest.writeString(entry.getValue()); } dest.writeInt(this.mapWithParcelableValues.size()); for (Map.Entry<Long, Bitmap> entry : this.mapWithParcelableValues.entrySet()) { dest.writeValue(entry.getKey()); dest.writeParcelable(entry.getValue(), flags); } } protected MapParcelable(Parcel in) { int sampleMapSize = in.readInt(); this.sampleMap = new HashMap<String, String>(sampleMapSize); for (int i = 0; i < sampleMapSize; i++) { String key = in.readString(); String value = in.readString(); this.sampleMap.put(key, value); } int mapWithParcelableValuesSize = in.readInt(); this.mapWithParcelableValues = new HashMap<Long, Bitmap>(mapWithParcelableValuesSize); for (int i = 0; i < mapWithParcelableValuesSize; i++) { Long key = (Long) in.readValue(Long.class.getClassLoader()); Bitmap value = in.readParcelable(Bitmap.class.getClassLoader()); this.mapWithParcelableValues.put(key, value); } } public static final Creator<MapParcelable> CREATOR = new Creator<MapParcelable>() { @Override public MapParcelable createFromParcel(Parcel source) { return new MapParcelable(source); } @Override public MapParcelable[] newArray(int size) { return new MapParcelable[size]; } }; }