0

我在这里几乎阅读了如何将复杂对象传递给活动的主题。有两种方法可以做到:

1) 可序列化对象

2) 可包裹对象

我看到的所有示例仍然是简单的对象或包含原始字段的对象,或者这些字段可以是可序列化或可打包的。现在,假设我有一个非常非常复杂的对象,例如:

公共类 ComplexObject{

私有类 1 对象1;
私有类 2 对象 2;
……
私有类 N 对象N;

}

第 i 个对象可以包含非原始字段。现在,如果我想将ComplexObject传递给一个活动,我必须对每个字段Class1、Class2、ClassN进行序列化或打包。无论如何,在不进行每次序列化或打包的情况下仍然可以传递我的ComplexObject吗?

4

3 回答 3

2

如果您的 complexObject 是一个应用程序模型,我建议将它放在Application子类中,可以从任何组件 ( Activity, Service) 访问它。如果您有更多对象,请将它们放在一个ListMap内部模型中,并在Activities.

没有必要做一切Parcelable

于 2013-05-05T19:08:22.017 回答
2

不,您的顶级对象必须是可序列化的或可分包的,以便将其作为额外的传递,并且要使其正常工作,任何子对象也必须是可序列化的或可分包的。

这些接口是系统知道如何打包数据的唯一方式。如果不实现它们,就无法知道如何将任意对象“分解”为可以作为 Extra 传递的基元。

于 2013-05-05T17:08:49.803 回答
1

你可以做到Parcelable

 public class MyParcelable implements Parcelable {
     private Class1 object1;
     private Class2 object2;
     ....
     private ClassN objectN;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeParcelable(object1, flags)
         out.writeParcelable(object2, flags)
         ...
         out.writeParcelable(objectN, flags)
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };

     private MyParcelable(Parcel in) {
         object1 = in.readParcelable(Class1.class.getClassLoader());
         object2 = in.readParcelable(Class2.class.getClassLoader());
         ...
         objectN = in.readParcelable(ClassN.class.getClassLoader());
     }
 }

我假设Class1, Class2, ...,ClassN已经实现了Parcelable

于 2013-05-05T17:09:13.637 回答