[英]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.