YY項目之Parcelable傳遞複雜的對象

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

相關文章
相關標籤/搜索