Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

Parceables are a pain and only pass by value and not reference. I would never recommend using them. Make a static model instance if you application and just get a shim reference to the object you need.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top