我试着让我的对象可打包。但是,我有自定义对象,这些对象具有我所做的其他自定义对象的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"));