将对象成员写入Parcel

时间:2012-03-28 20:43:35

标签: java android serialization parcelable parcel

到目前为止,我一直在与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中做些什么?

2 个答案:

答案 0 :(得分:28)

正确且更多的OO方式是使Bar也实现了Parcelable。

要阅读私有Foo构造函数中的Bar:

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

在writeToParcel方法中编写Bar:

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

希望这有帮助。

答案 1 :(得分:0)

Parceables是一种痛苦,只能通过价值而非参考。我绝不会推荐使用它们。如果你是应用程序,请创建一个静态模型实例,并获得所需对象的填充参考。