使用Intent傳遞物件(兩種)
阿新 • • 發佈:2019-02-15
說明
平常我們可以在Intent中新增一些資料,帶到下一個介面,就像這樣
/*在第一個頁面把資料裝進Intent*/
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("data1","hello");
intent.putExtra("data2","world");
startActivity(intent);
/*在第二個頁面拿到資料*/
getIntent().getStringExtra("data1");
getIntent().getStringExtra ("data2");
這樣沒有什麼問題,但是PutExtra所能支援的資料型別是有限的,如果你想傳遞一個自定義物件,是不支援的。
使用Intent來傳遞物件通常有2種實現方式:Serializable和Parceable
Serializable(第一種)
Serializable是序列化的意思,表示將一個物件轉換成可儲存或可傳輸的狀態。序列化後的物件可以在網路上進行傳輸,也可以儲存到本地.序列化的方法很簡單,實現Serializable介面就可以了.
1.比如有個Person類
public class Person implements Serializable{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
接下來在FirstActivity使用就非常簡單了
Person person = new Person();
person.setName("Tom");
person.setAge(18);
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("person1",person);
startActivity(intent);
在SecondActivity取出物件
序列化物件向下轉型為Person物件
Person person=(Person)getIntent().getSerializableExtra("person1");
Parceable(第二種)
不同於將物件序列化.Parceable是將一個完整的物件進行分解,而分解後的每一部分都是Intent所支援的資料型別.
Person類實現Parcelable 介面
public class Person implements Parcelable {
private String name;
private int age;
public Person() {
}
public static final Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(Parcel in) {
Person person = new Person();
person.name=in.readString();
person.age=in.readInt();
return person;
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
}