在Activity之间通过Intent和Bundle能够很好地传递java支持的基础类型,但是有时候我们需要在Activity之间传递对象甚至传递对象列表。
传递对象
如果需要传递对象,对象需要继承Serializable接口,在Bundle中有一个putSerializable方法。
public class User implements Serializable {
//其他代码省略
}
在Activity1中的java代码
User user = new User();
Intent intent = new Intent(MyActivity.this,OthereActivity.class);
intent.putSerializable("user", user);
startActivity(intent);
在Activity2中获取的java代码
Intent intent = getIntent();
CustomeClass cc=(CustomeClass)intent.getSerializableExtra("user");
传递对象列表
如果传递对象列表需要实现Parcelable接口。
public class Person implements Parcelable {
private int age;
private String name;
private String sex;
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getSex() {
return sex;
}
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {
public Person createFromParcel(Parcel source) {
// TODO Auto-generated method stub
Person p = new Person();
p.age = source.readInt();
p.name = source.readString();
p.sex = source.readString();
return p;
}
public Person[] newArray(int size) {
// TODO Auto-generated method stub
return new Person[size];
}
};
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(age);
dest.writeString(name);
dest.writeString(sex);
}
}
在Activity1中发送的java代码
intent.putParcelableArrayListExtra("plist", plist);
startActivity(intent);
在Activity2中接收的java代码
ArrayList<Person> plist = getIntent().getParcelableArrayListExtra("plist");