2014-03-19 116 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

相关问题