假设我想在 Intent
中存储类型为 MyObject
的自定义对象。这样做的方法是让 MyObject
实现 Parcelable
。如果 MyObject
的字段之一也是 Widget
类型的自定义对象,显然要做的是让 Widget
实现 Parcelable
也是。
问题是在实现 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
首先?
最佳答案
我愿意(也确实)选择 Parceler:https://github.com/johncarl81/parceler
Parceler is a code generation library that generates the Android Parcelable boilerplate source code. No longer do you have to implement the Parcelable interface, the writeToParcel() or createFromParcel() or the public static final CREATOR. You simply annotate a POJO with @Parcel and Parceler does the rest.
它真的很容易使用。
关于android - 使用 Parcelable 在 Activity 之间传递高度嵌套的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31897220/