将对象成员写入Parcel

tac*_*cos 11 java serialization android parcel parcelable

到目前为止,我一直在使用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); }
Run Code Online (Sandbox Code Playgroud)

但是现在,如果我有一个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?
}
Run Code Online (Sandbox Code Playgroud)

我是以错误的方式接近这个吗?我应该怎样做我writeToParcel的包裹会员Bar

yor*_*rkw 29

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

要在私有Foo构造函数中读取Bar:

private Foo(final Parcel in) {
  ... ...
  bar = in.readParcelable(getClass().getClassLoader());
  ... ...
}
Run Code Online (Sandbox Code Playgroud)

要在writeToParcel方法中编写Bar:

public void writeToParcel(final Parcel dest, final int flags) {
  ... ...
  dest.writeParcelable(bar, flags);
  ... ...
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 添加,因为有些人可能会在这里混淆**getClass().getClassLoader()**表示**Bar.class.getClassLoader()** (4认同)