Android通過Parcelable傳遞複雜的物件資料和簡單的物件資料
阿新 • • 發佈:2018-12-01
二次驗證:絕對有效
轉:https://blog.csdn.net/u014614038/article/details/56279075
Android推薦可以通過Parcelable來傳遞自定義的資料(),比如以下的資料體:
public class GradeInfoForSearch {
public String ID;
public String Name;
}
只要通過實現了Parcelable介面就可以了,程式碼如下:
public class GradeInfoForSearch implements Parcelable { public String ID; public String Name; public GradeInfoForSearch() { } public GradeInfoForSearch(Parcel source) { ID = source.readString(); Name = source.readString(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(ID); dest.writeString(Name); } public final static Parcelable.Creator<GradeInfoForSearch> CREATOR = new Parcelable.Creator<GradeInfoForSearch>() { @Override public GradeInfoForSearch createFromParcel(Parcel source) { return new GradeInfoForSearch(source); } @Override public GradeInfoForSearch[] newArray(int size) { return new GradeInfoForSearch[size]; } }; @Override public String toString() { return "GradeInfoForSearch [ID=" + ID + ", Name=" + Name + "]"; } }
複雜的資料體(物件中巢狀物件或者陣列的形式):
public class ResourceBean{ public List<ResourceClasslevelOne> resourceClasslevelOne; public List<CategoryInfoForSearch> categorylist; public List<SubjectNameForIndex> subjectList; public List<GradeInfoForSearch> gradeList; public List<ResourceClassLevelTwoForSearch> resourceClassForlevelTwo; }
正確的做法是:
1.ResourceBean實現了Parcelable。
2.成員變數的所有自定義資料體都實現Parcelable。
writeToParce方法如下:
@Override public void writeToParcel(Parcel dest, int flags) { if (resourceClasslevelOne != null) dest.writeParcelableArray( resourceClasslevelOne.toArray(new ResourceClasslevelOne[resourceClasslevelOne.size()]), flags); .... }
ResourceBean(Parcel source)如下:
public ResourceBean(Parcel source) {
Parcelable[] resourceClasslevelOneps = source.readParcelableArray(ResourceClasslevelOne.class.getClassLoader());
if (resourceClasslevelOneps != null) {
resourceClasslevelOne = Arrays.asList(Arrays.asList(resourceClasslevelOneps)
.toArray(new ResourceClasslevelOne[resourceClasslevelOneps.length]));
}
....
}
}