Intent传递值对象的两种方式:Serializable和Parcelable

来源:互联网 发布:现在开淘宝店晚不晚 编辑:程序博客网 时间:2024/05/16 15:06

首先什么是值对象:自定义的,有数据类型的对象!
用Intent传递我们自定义的数据类型对象时,只能有两种方式,第一种就是Serializable,这种是Java语音内置的用于序列化数据类型的一个接口!这种方式很方便,直接放自定义的数据类继承它就可以了!
第二中是Parcelable,这种是Andorid平台自己的序列化数据的一个接口!这种方式的使用就相对复杂一点,首先继承这个接口,这时候要复习两个方法,分别是:

@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}

第一个方法,我们默认不动就可以了,在第二个方法中要将我们数据类型的元素放进,类如:
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeBundle(new Bundle());
dest.writeString(getUnit());
dest.writeInt(getIndex());
}
做完这些之后,还要重写一个方法:T 代表你自己定位的数据类
public static final Creator CREATOR = new Creator() {
@Override
public UnitData createFromParcel(Parcel in) {
return new UnitData(in.readString(), in.readInt());
}
@Override
public UnitData[] newArray(int size) {
return new UnitData[size];
}
};
如果你用的是AS的话,会智能的提示你添加次方法,如果是eclipse的话好像只能自己动手写了,也挺麻烦的!
这两个方法第二个直接返回size就可以了,第一个方法需要返回你的数据类型,按照上面的写法就可以了!
下面是全部的代码:

public class UnitData implements Parcelable {
private String unit;
private int index;
public UnitData(String unit, int index) {
this.unit = unit;
this.index = index;
}
public static final Creator CREATOR = new Creator() {
@Override
public UnitData createFromParcel(Parcel in) {
return new UnitData(in.readString(), in.readInt());
}
@Override
public UnitData[] newArray(int size) {
return new UnitData[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(getUnit());
dest.writeInt(getIndex());
}
public String getUnit() {
return unit;
}
public void setUnit(String unit) {
this.unit = unit;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}

0 0
原创粉丝点击