代码如下:
public class TestParcelableBean implements Parcelable {
private String name;
private Student student;
private List<Student> list;
//重点1,只有基本数据类型会自动写入,其他变量需要自己添加
public TestParcelableBean(Parcel in) {
name = in.readString();
student = in.readParcelable(Student.class.getClassLoader());
//此处必须判断是否为空,否则会报空指针异常
if (list == null)
list = new ArrayList<Student>();
in.readTypedList(list, Student.CREATOR);
}
public List<Student> getList() {
return list;
}
public void setList(List<Student> list) {
this.list = list;
}
public TestParcelableBean(String name, Student student, List<Student> list) {
this.name = name;
this.student = student;
this.list = list;
}
@Override
public String toString() {
return "TestParcelableBean{" + "name='" + name + '\'' + ", student=" + student + ", " +
"list=" + list + '}';
}
//重点2,默认即可
public static final Creator<TestParcelableBean> CREATOR = new Creator<TestParcelableBean>() {
@Override
public TestParcelableBean createFromParcel(Parcel in) {
return new TestParcelableBean(in);
}
@Override
public TestParcelableBean[] newArray(int size) {
return new TestParcelableBean[size];
}
};
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//重点3,此处默认即可
@Override
public int describeContents() {
return 0;
}
//重点4,需要手动写入数据
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeParcelable(student, flags);
dest.writeTypedList(list);
}
public static class Student implements Parcelable {
private String age;
@Override
public String toString() {
return "Student{" + "age='" + age + '\'' + '}';
}
public Student(String age) {
this.age = age;
}
protected Student(Parcel in) {
age = in.readString();
}
public static final Creator<Student> CREATOR = new Creator<Student>() {
@Override
public Student createFromParcel(Parcel in) {
return new Student(in);
}
@Override
public Student[] newArray(int size) {
return new Student[size];
}
};
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(age);
}
}
}
荆轲刺秦王