欢迎转载!
用Intent传递基本数据类型很方便,如:
//传递参数
intent.putExtra("sData", "hello");
intent.putExtra("iData", 80);
//获取参数
getIntent.getStringExtra("sData");
getIntent.getIntExtra("iData", 0);
下面介绍传递自定义参数的方法
1、Serializable方式
Serializable即序列化,将对象转换成可存储或可传输的状态,序列化的对象可在网络传输或本地存储,序列化的方法就是让自定义对象实现Serializable接口。
public class Person implements Serializable {
private String mName;
private int mAge;
......
}
//实现了Serializable接口,即可直接传递自定义对象了
intent.putExtra("pData", person);
//获取序列化的自定义对象
Person person = (Person) getSerializableExtra("pData");
2、Parcelable方式
Parcelable方式将完整的对象分解为Intent支持的数据类型,实现传递的功能
public class Person implements Parcelable {
private String mName;
private int mAge;
......
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mName);
dest.writeInt(mAge);
}
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
@Override
public Person createFromParcel(Parcel source) {
Person person = new Person();
person.mName = source.readString();
person.mAge = source.readInt();
return person;
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
}
Parcelable的实现方式要稍微复杂些,实现Parcelable接口,需重写describeContents()和writeToParcel()这2个方法。
其中describeContents()方法直接返回0即可,而writeToParcel()方法需调用Parcel的writeXxx()方法将Person类中的字段转化为基本类型写出,字符串调用writeString()方法,整型调用writeInt()方法,以此类推。
还必须在Person类中提供一个常量CREATOR,这里创建Parcelable.Creator()接口的一个实现,将泛型指定为Person。
重写createFromParcel()和newArray()方法,在createFromParcel()中去读取写出的mName()和mAge(),并创建一个Person对象进行返回,注意类成员变量的读取顺序一定要和写出的顺序完全相同。newArray()方法只需new处一个数组并使用方法中传入的size()作为数组大小即可。