我试着让我的对象可打包。但是,我有自定义对象,这些对象具有我所做的其他自定义对象的ArrayList属性。
最好的方法是什么?
我试着让我的对象可打包。但是,我有自定义对象,这些对象具有我所做的其他自定义对象的ArrayList属性。
最好的方法是什么?
当前回答
将: bundle.putSerializable(“关键”,(序列化)对象);
得到: List<Object> obj = (List<Object>)((Serializable)bundle.getSerializable("key"));
其他回答
你可以在这里、这里(代码在这里)和这里找到一些例子。
您可以为此创建一个POJO类,但是您需要添加一些额外的代码以使其可封装。看一下实现。
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);
// the order needs to be the same as in writeToParcel() method
this.id = data[0];
this.name = data[1];
this.grade = data[2];
}
@Оverride
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];
}
};
}
一旦你创建了这个类,你可以很容易地通过Intent传递这个类的对象,并在目标活动中恢复这个对象。
intent.putExtra("student", new Student("1","Mike","6"));
在这里,student是将数据从包中解包所需要的键。
Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");
这个例子只显示了String类型。但是,你可以打包任何你想要的数据。试试吧。
编辑:另一个例子,由Rukmal Dias提出。
这很简单,你可以在android studio上使用一个插件来制作对象Parcelables。
public class Persona implements Parcelable {
String nombre;
int edad;
Date fechaNacimiento;
public Persona(String nombre, int edad, Date fechaNacimiento) {
this.nombre = nombre;
this.edad = edad;
this.fechaNacimiento = fechaNacimiento;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(this.nombre);
dest.writeInt(this.edad);
dest.writeLong(fechaNacimiento != null ? fechaNacimiento.getTime() : -1);
}
protected Persona(Parcel in) {
this.nombre = in.readString();
this.edad = in.readInt();
long tmpFechaNacimiento = in.readLong();
this.fechaNacimiento = tmpFechaNacimiento == -1 ? null : new Date(tmpFechaNacimiento);
}
public static final Parcelable.Creator<Persona> CREATOR = new Parcelable.Creator<Persona>() {
public Persona createFromParcel(Parcel source) {
return new Persona(source);
}
public Persona[] newArray(int size) {
return new Persona[size];
}
};}
我找到了最简单的方法来创建Parcelable类
1. 导入Android Parcelable代码生成器
2. 创建类
public class Sample {
int id;
String name;
}
3.从菜单生成> Parcelable
完成了。
将: bundle.putSerializable(“关键”,(序列化)对象);
得到: List<Object> obj = (List<Object>)((Serializable)bundle.getSerializable("key"));