Writing Objects members to Parcels

tacos_tacos_tacos picture tacos_tacos_tacos · Mar 28, 2012 · Viewed 12.4k times · Source

So far I've been chugging along with Parcelable objects without issue, mainly because all of their members have been types that have writeX() methods associated with them. For example, I do:

public String name;

private Foo(final Parcel in) {
    name = in.readString(); }
public void writeToParcel(final Parcel dest, final int flags) {
    dest.writeString(name); }

But now if I have a Bar member things get a little dicey for me:

public Bar bar;

private Foo(final Parcel in) {
    bar = new Bar(); //or i could actually write some constructor for Bar, this is a demo.
    bar.memberString = in.readString();
}

public void writeToParcel(final Parcel dest, final int flags) {
    // What do I do here?
}

Am I approaching this the wrong way? What should I do in my writeToParcel to parcel member Bars?

Answer

yorkw picture yorkw · Mar 28, 2012

The correct and more OO way is make Bar implements Parcelable too.

To read Bar in your private Foo constructor:

private Foo(final Parcel in) {
  ... ...
  bar = in.readParcelable(getClass().getClassLoader());
  ... ...
}

To write Bar in your writeToParcel method:

public void writeToParcel(final Parcel dest, final int flags) {
  ... ...
  dest.writeParcelable(bar, flags);
  ... ...
}

Hope this helps.