android提供了一种新的类型:Parcel。本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。 除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中。
Parcelable实现要点:需要实现三个东西:
1)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.声明如下:
writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc
2)describeContents方法
3)静态的Parcelable.Creator接口,本接口有两个方法:
createFromParcel(Parcel in) 实现从in中创建出类的实例的功能;
newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。估计本方法是供外部类反序列化本类数组使用。
简单的使用方法:
public class Student implements Parcelable{
public int _id;
public string name;
public int sex;
public int age;
Student (Parcel p){
_id = p.readInt();
name = p.readString();
sex = p.readInt();
age = p.readInt();
}
Student(){};
public static final Parcelable.Creator<Student> CREATOR
= new Parcelable.Creator<Student>() {
public Student createFromParcel(Parcel p) {
return new Student(p);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel p, int flags) {
p.writeInt(_id);
p.writeString(label);
p.writeInt(sex);
p.writeInt(age);
}
}
发送Parcel的activity
public SendParcel extends Activity{
public void onCreate(Bundle bundle){
super.onCreate(bundle);
setContentView(R.layout.main);
Student s = new Student();
s._id = 1;
s.name = "ygc";
s.sex = 1;
s.age= 23;
Intent i = new Intent();
i.putExtra("key", s);
i.setClass(this, Receive.class);
startActivity(i);
}
}
接收Parcel的activity
public class Receive extends Activity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
Intent i = getIntent();
Student s = i.getParcelableExtra("key");
System.out.println(s.name);
}
Parcelable实现要点:需要实现三个东西:
1)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.声明如下:
writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc
2)describeContents方法
3)静态的Parcelable.Creator接口,本接口有两个方法:
createFromParcel(Parcel in) 实现从in中创建出类的实例的功能;
newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。估计本方法是供外部类反序列化本类数组使用。
简单的使用方法:
public class Student implements Parcelable{
public int _id;
public string name;
public int sex;
public int age;
Student (Parcel p){
_id = p.readInt();
name = p.readString();
sex = p.readInt();
age = p.readInt();
}
Student(){};
public static final Parcelable.Creator<Student> CREATOR
= new Parcelable.Creator<Student>() {
public Student createFromParcel(Parcel p) {
return new Student(p);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel p, int flags) {
p.writeInt(_id);
p.writeString(label);
p.writeInt(sex);
p.writeInt(age);
}
}
发送Parcel的activity
public SendParcel extends Activity{
public void onCreate(Bundle bundle){
super.onCreate(bundle);
setContentView(R.layout.main);
Student s = new Student();
s._id = 1;
s.name = "ygc";
s.sex = 1;
s.age= 23;
Intent i = new Intent();
i.putExtra("key", s);
i.setClass(this, Receive.class);
startActivity(i);
}
}
接收Parcel的activity
public class Receive extends Activity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
Intent i = getIntent();
Student s = i.getParcelableExtra("key");
System.out.println(s.name);
}
}
android提供了一种新的类型:Parcel。本类被用作封装数据的容器,封装后的数据可以通过Intent或IPC传递。除了基本类型以外,只有实现了Parcelable接口的类才能被放入Parcel中。
Parcelable实现要点:需要实现三个东西
1)writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中.声明如下:
writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc
2)describeContents方法。没搞懂有什么用,反正直接返回0也可以
3)静态的Parcelable.Creator接口,本接口有两个方法:
createFromParcel(Parcel in) 实现从in中创建出类的实例的功能
newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。估计本方法是供外部类反序列化本类数组使用。
示例:
需求:我们经常需要在多个部件(activity或service)之间通过Intent传递一些数据,简单类型(如数字、字符串)的可以直接放入Intent。复杂类型(例如,J2ee中的Bean)的必须实现Parcelable接口。示例如下:
这里采用Bundle是因为在Parcel中并没有key的概念存在,而Bundle相当于Map。