0

ここで、複雑なオブジェクトをアクティビティに渡す方法のほとんどのトピックを読みました。次の 2 つの方法があります。

1) シリアライズ可能なオブジェクト

2) パーセル可能なオブジェクト

私が見たすべての例はまだ単純なオブジェクトまたはプリミティブ フィールドを含むオブジェクトであるか、これらのフィールドはシリアル化可能またはパーセル化可能です。次に、次のような非常に複雑なオブジェクトがあるとします。

パブリッククラスComplexObject{

プライベート Class1 object1;
プライベート Class2 object2;
....
プライベート ClassN objectN;

}

i 番目のオブジェクトには、非プリミティブ フィールドを含めることができます。ComplexObjectをアクティビティに渡したい場合は、すべてのフィールドClass1、Class2、ClassNをシリアル化またはパーセル化する必要があります。すべてのシリアル化またはパーセル化を行わずに、 ComplexObjectを渡す方法はありますか?

4

3 に答える 3

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

于 2013-05-05T17:09:13.637 に答える