将对象成员写入Parcel

到目前为止,我一直在使用Parcelable对象而没有问题,主要是因为它们的所有成员都是具有writeX()关联的writeX()方法的types。 例如,我这样做:

 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做什么?

正确和更多的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); ... ... } 

希望这可以帮助。

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