How can I make my custom objects Parcelable?

后端 未结 11 2582
旧巷少年郎
旧巷少年郎 2020-11-21 07:40

I\'m trying to make my objects Parcelable. However, I have custom objects and those objects have ArrayList attributes of other custom objects I have made.

11条回答
  •  我寻月下人不归
    2020-11-21 08:00

    You can find some examples of this here, here (code is taken here), and here.

    You can create a POJO class for this, but you need to add some extra code to make it Parcelable. Have a look at the implementation.

    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];
               }
           };
       }
    

    Once you have created this class, you can easily pass objects of this class through the Intent like this, and recover this object in the target activity.

    intent.putExtra("student", new Student("1","Mike","6"));
    

    Here, the student is the key which you would require to unparcel the data from the bundle.

    Bundle data = getIntent().getExtras();
    Student student = (Student) data.getParcelable("student");
    

    This example shows only String types. But, you can parcel any kind of data you want. Try it out.

    EDIT: Another example, suggested by Rukmal Dias.

提交回复
热议问题