Making a custom object Parcelable.
suggest change/** * Created by Alex Sullivan on 7/21/16. */ public class Foo implements Parcelable { private final int myFirstVariable; private final String mySecondVariable; private final long myThirdVariable; public Foo(int myFirstVariable, String mySecondVariable, long myThirdVariable) { this.myFirstVariable = myFirstVariable; this.mySecondVariable = mySecondVariable; this.myThirdVariable = myThirdVariable; } // Note that you MUST read values from the parcel IN THE SAME ORDER that // values were WRITTEN to the parcel! This method is our own custom method // to instantiate our object from a Parcel. It is used in the Parcelable.Creator variable we declare below. public Foo(Parcel in) { this.myFirstVariable = in.readInt(); this.mySecondVariable = in.readString(); this.myThirdVariable = in.readLong(); } // The describe contents method can normally return 0. It's used when // the parceled object includes a file descriptor. @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(myFirstVariable); dest.writeString(mySecondVariable); dest.writeLong(myThirdVariable); } // Note that this seemingly random field IS NOT OPTIONAL. The system will // look for this variable using reflection in order to instantiate your // parceled object when read from an Intent. public static final Parcelable.Creator<Foo> CREATOR = new Parcelable.Creator<Foo>() { // This method is used to actually instantiate our custom object // from the Parcel. Convention dictates we make a new constructor that // takes the parcel in as its only argument. public Foo createFromParcel(Parcel in) { return new Foo(in); } // This method is used to make an array of your custom object. // Declaring a new array with the provided size is usually enough. public Foo[] newArray(int size) { return new Foo[size]; } }; }
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents