Запись объектов-членов в посылки - PullRequest
10 голосов
/ 29 марта 2012

До сих пор я без проблем пихал вместе с Parcelable объектами, главным образом потому, что все их члены были типами, с которыми связаны writeX() методы.Например, я делаю:

public String name;

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

Но теперь, если у меня есть Bar член, вещи становятся немного рискованными для меня:

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?
}

Я неправильно подхожу к этому?Что я должен сделать в своем writeToParcel для посылки участника Bar s?

Ответы [ 2 ]

28 голосов
/ 29 марта 2012

Правильный и более оригинальный способ - сделать так, чтобы Bar также реализовывал Parcelable.

Чтобы прочитать Bar в вашем личном конструкторе Foo:

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

Чтобы написать Bar в вашем методе writeToParcel:

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

Надеюсь, это поможет.

0 голосов
/ 29 марта 2012

Parceables - это боль, и они передаются только по значению, а не по ссылке. Я бы никогда не рекомендовал их использовать. Создайте экземпляр статической модели, если вы используете приложение, и просто получите отсылочную ссылку на нужный вам объект.

...