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