[英]What is Parcelable in android
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
在我的 Android 課程中,講師使用了這段代碼,但他們並沒有完全解釋這一點。 我該如何解釋這段代碼? 我嘗試閱讀文檔,但未能解釋。
這個概念稱為包裹
Parcelable是Java Serializable的Android實現。 它假定某種結構和處理方式。 與標准Java序列化相比,這種方式可以相對快速地處理Parcelable。
為了將您的自定義對象解析為其他組件,他們需要實現android.os.Parcelable接口。 它還必須提供一個稱為CREATOR的靜態最終方法,該方法必須實現Parcelable.Creator接口。
您編寫的代碼將成為您的模型類。
您可以在Activity中使用Parcelable,例如:
intent.putExtra("student", new Student("1")); //size which you are storing
並得到這個對象:
Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");
學生是模型班級的名稱。 用你的替換它。
簡單來說,Parcelable用於將模型類的整個對象發送到另一個頁面。
在您的代碼中,它在模型中,並且將int值大小存儲到Parcelable對象中,以便在其他活動中發送和檢索。
參考:
-->可包裹在 Android
用於將數據傳遞給 Android 組件的 Bundle object 是專門對象的鍵/值存儲。 它類似於 Map 但只能包含這些特殊對象
您可以將以下對象類型放入 Bundle 中:
細繩
原語
可序列化
可包裹
如果您需要通過 Bundle 傳遞您的客戶對象,您應該實現 Parcelable 接口。
-->實施 Parcelable
您可以為此創建一個 POJO class,但您需要添加一些額外的代碼以使其成為Parcelable 。 看一下實現。
public class Student implements Parcelable{
private String id;
private String name;
private String grade;
// Constructor
public Student(String id, String name, String grade){
this.id = id;
this.name = name;
this.grade = grade;
}
// Getter and setter methods
.........
.........
// Parcelling part
public Student(Parcel in){
String[] data = new String[3];
in.readStringArray(data);
this.id = data[0];
this.name = data[1];
this.grade = data[2];
}
@override
public int describeContents(){
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {this.id,
this.name,
this.grade});
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
一旦你創建了這個class,你可以像這樣通過Intent輕松傳遞這個class的對象,並在目標活動中恢復這個object。
intent.putExtra("student", new Student("1","Mike","6"));
在這里,student 是您從包中解包數據所需的密鑰。
Bundle data = getIntent().getExtras();
Student student = data.getParcelable("student");
此示例僅顯示 String 類型。 但是,您可以打包任何類型的數據。 試試看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.