假设我想在一个 Intent 中存储一个自定义类型为 MyObject 的对象。实现此目的的方法是让 MyObject 实现 Parcelable 接口。如果 MyObject 的字段之一也是 Widget 类型的自定义对象,则显而易见的做法是让 Widget 也实现 Parcelable 接口。
问题在于,实现 Parcelable 接口时涉及大量样板代码。您可以通过不让 Widget 实现 Parcelable 接口,而只是提供一个带有 Parcel 参数的构造函数和一个名为 writeToParcel 的方法来解决这个问题。
问题在于,实现 Parcelable 接口时涉及大量样板代码。您可以通过不让 Widget 实现 Parcelable 接口,而只是提供一个带有 Parcel 参数的构造函数和一个名为 writeToParcel 的方法来解决这个问题。
public final class Widget {
private final int a;
private final String b;
Widget(Parcel in) {
a = in.readInt();
b = in.readString();
}
void writeToParcel(Parcel out) {
out.writeInt(a);
out.writeString(b);
}
}
您可以在Parcelable
对象中添加一个Widget
字段,如下所示:
public class MyObject implements Parcelable {
private final int x;
private final Widget w;
MyObject(int x, Widget w) {
this.x = x;
this.w = w;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeInt(x);
w.writeToParcel(out);
}
public static final Parcelable.Creator<MyObject> CREATOR
= new Parcelable.Creator<MyObject>() {
@Override
public MyObject createFromParcel(Parcel in) {
return new MyObject(in.readInt(), new Widget(in));
}
@Override
public MyObject[] newArray(int size) {
return new MyObject[size];
}
};
}
这是一个可接受的方式吗?在一个项目中有许多自定义类,它们可以被写入和读取Parcel
,但它们实际上没有实现Parcelable
,这在android上是否考虑为非惯用方式?或者我使用Parcelable
传递具有许多自定义类型字段的复杂对象(这些对象又具有许多自定义类型字段等等),这是否表明我首先不应该使用Parcelable
?
MyObject
字段,然后在Activity B中它将从静态类中读取该MyObject
字段。这样,您甚至不需要考虑可包装性。 - Ian Osawaye