2014年7月21日 星期一

了解Parcel

了解Parcel

infor from: http://fecbob.pixnet.net/blog/post/35394025-%5Bandroid%5Dparcelable-%E8%A9%B3%E8%A7%A3

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])即可。估計本方法是供外部類反序列化本類陣列使用。


簡單的使用方法:


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);
}


}

沒有留言:

張貼留言