写了个例子来试验Parcelable接口
程序组织
//main
ParcelableDemo.java
public class ParcelableDemo extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Person p = new Person();
p.map = new HashMap<String, String>();
p.map.put("key", "value");
p.name="zhangsan";
for(int i = 0;i < 3 ;i++){
SelfDefineData sdd = new SelfDefineData();
sdd.setData(100 + i);
p.data[i] = sdd;
}
Intent intent = new Intent(this, TestActivity.class);
intent.putExtra("person", p);
startActivity(intent);
}
}
数据对象 Person
public class Person implements Parcelable {
public HashMap<String, String> map = new HashMap<String, String>();
public String name;
public SelfDefineData data[] = new SelfDefineData[3];
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeMap(map);
dest.writeString(null);
dest.writeTypedArray(data, flags);
}
public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
@SuppressWarnings("unchecked")
@Override
public Person createFromParcel(Parcel source) {
Person p = new Person();
p.map = source.readHashMap(HashMap.class.getClassLoader());
p.name = source.readString();
source.readTypedArray(p.data,SelfDefineData.CREATOR);
return p;
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
}
自定义数据 SelfDefineData
public class SelfDefineData implements Parcelable {
private int mData = 0;
public SelfDefineData(){
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mData);
}
public void setData(int data){
mData = data;
}
public int getData(){
return mData;
}
public static final Parcelable.Creator<SelfDefineData> CREATOR =
new Parcelable.Creator<SelfDefineData>() {
@Override
public SelfDefineData createFromParcel(Parcel in) {
return new SelfDefineData(in);
}
@Override
public SelfDefineData[] newArray(int size) {
return new SelfDefineData[size];
}
};
private SelfDefineData(Parcel in){
mData = in.readInt();
}
}
测试Activity
public class TestActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
Person p = intent.getParcelableExtra("person");
String value = p.map.get("key");
System.out.println("map-------------->" + value);
System.out.println("name----->" + p.name);
System.out.println("data1----->" + p.data[0].getData());
System.out.println("data2----->" + p.data[1].getData());
System.out.println("data3----->" + p.data[2].getData());
}
}
运行结果