将复杂对象传递给活动

时间:2013-05-05 17:01:11

标签: java android android-intent

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

1)可序列化对象

2)Parcelable object

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

public class ComplexObject{

private Class1 object1;
private Class2 object2;
....
private ClassN objectN;

}

第i个对象可以包含非原始字段。现在,如果我想将 ComplexObject 传递给一个活动,我必须序列化或包裹每个字段 Class1,Class2,ClassN 。无论如何仍然通过我的 ComplexObject 而不执行每个序列化或parcelize?

3 个答案:

答案 0 :(得分:2)

不,您的顶级对象必须是可序列化的,或者是parecelable,以便将其作为Extra传递,为了使其工作,任何子对象也必须是可序列化的或可分解的。

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

答案 1 :(得分:2)

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

无需制作所有内容Parcelable

答案 2 :(得分: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());
     }
 }

我认为Class1Class2,...,ClassN已经实施Parcelable