2014-03-19 65 views
2

我有類似這樣的類。Android實現具有hashmap的Parcelable對象

public class RateData { 
    Map<String, List<RateDTO>> rateMap; 
} 

public class RateDTO { 

    private String code; 

    private String name; 

    private String value; 
} 

現在我需要parcelable這個RateData類。我認爲我們不能將這個rateMap作爲正常變量。

請給我一個例子如何做到這一點。

+1

你到目前爲止嘗試過什麼嗎? – curtisLoew

回答

8

您應該製造DateRTOParcelable - 這應該是微不足道的。然後,

Map<String, List<RateDTO>> map; 

public void writeToParcel(Parcel out, int flags) { 
    out.writeInt(map.size()); 

    for (Map.Entry<String, List<RateDTO>> entry : map.entrySet()) { 
     out.writeString(entry.getKey()); 

     final List<RateDTO> list = entry.getValue(); 
     final int listLength = list.size(); 

     out.writeInt(listLength); 

     for (RateDTO item: list) { 
      out.writeParcelable(item, 0); 
     } 
    } 
} 

private MyParcelable(Parcel in) { 
    final int size = in.readInt(); 

    for (int i = 0; i < size; i++) { 
     final String key = in.readString(); 
     final int listLength = in.readInt(); 

     final List<RateDTO> list = new ArrayList<RateDTO>(listLength); 
     for (int j = 0; j < listLength; j++) { 
      final RateDTO value = in.readParcelable(ParentClass.class.getClassLoader()); 
      list.add(value); 
     } 

     map.put(key, list); 
    } 
} 

我還沒有測試代碼,但我相信它應該接近OK。請注意,如果你的地圖比較大,這個解決方案並不是特別好。

+0

請告訴我,ParentClass是什麼意思? – user1688181

相關問題