Parcelable简单的数据传递就不在此另加介绍了,请移步:Android中Parcelable接口用法html
这里主要介绍下Parcelable传递复杂对象的使用方法:java
假设咱们有一个这样结构的类:ide
public class Data implements Parcelable { public int practice_id; public LinkedHashMap<Integer, ArrayList<PracticeBean>> questions; public Data(int practice_id, LinkedHashMap<Integer, ArrayList<PracticeBean>> questions) { this.practice_id = practice_id; this.questions = questions; } public Data() { } protected Data(Parcel in) { practice_id = in.readInt(); // 读取以前写入的size int size = in.readInt(); if(questions == null){ questions = new LinkedHashMap<>(); } for (int i = 0 ;i < size ;i++) { Integer key = in.readInt(); ArrayList<PracticeBean> value = in.readArrayList(PracticeBean.class.getClassLoader()); questions.put(key, value); } } public static final Creator<Data> CREATOR = new Creator<Data>() { @Override public Data createFromParcel(Parcel in) { return new Data(in); } @Override public Data[] newArray(int size) { return new Data[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeInt(practice_id); // 将LinkedHashMap的大小写进内存,供解析的时候使用 /* 这里采用循环写入的方式,以后读取也须要采起相同的协议解析便可 */ parcel.writeInt(questions.size()); for (LinkedHashMap.Entry<Integer, ArrayList<PracticeBean>> entry : questions.entrySet()) { parcel.writeInt(entry.getKey()); parcel.writeList(entry.getValue()); } } @Override public String toString() { return "Data{" + "practice_id=" + practice_id + ", questions=" + questions + '}'; } }
这里说明下,使用LinkedHashMap的目的是在解析出来以后保持以前的顺序。this
主要的思想是:
spa
按照必定的协议,将复杂的对象分解为简单的对象直到能够直接使用parcel的实例方法写进内存,而后读取的时候按照相同的协议解析。code
参考:http://stackoverflow.com/questions/8254654/how-write-java-util-map-into-parcel-in-a-smart-wayhtm