【问题标题】:Android Parcelable usageAndroid Parcelable 用法
【发布时间】:2015-06-26 08:50:39
【问题描述】:

我有一个具有以下结构的类:

class Example {
    Integer age;
    String name;
    Collection<Example2>examples;

    class Example2 {
        Integer number;
         Collection<String>strings;
   }
}

我怎样才能让这个类实现 Parcelable 以便我可以跨活动发送它的对象。

【问题讨论】:

标签: android parcelable


【解决方案1】:

最简单的方法是使用@AutoParcel,让它为您处理繁重的工作。

【讨论】:

    【解决方案2】:

    你应该看看这个帖子:Android: Making a class parcelable

    所以你的课程应该是这样的:

    class Example implements Parcelable {
        Integer age;
        String name;
        ArrayList<Example2> examples;
    
        public Example(Parcel in) {
            examples = new ArrayList<>();
            readFromParcel(in);
        }
    
       @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInt(age);
            dest.writeString(name);
            dest.writeList(examples != null ? examples : new ArrayList());
        }
    
        private void readFromParcel(Parcel in) {
            age = in.readInt();
            name = in.readString();
            in.readList(examples, Example2.class.getClassLoader());
        }
    
        public static final Creator<Example> CREATOR = new Creator<Example>() {
            @Override
            public Example createFromParcel(Parcel in) {
                return new Example(in);
            }
    
            @Override
            public Example[] newArray(int size) {
                return new Example[size];
            }
        };
    }
    

    class Example2 implements Parcelable {
       Integer number;
       ArrayList<String> labels;
    
       public Example2(Parcel in) {
            labels = new ArrayList<>();
            readFromParcel(in);
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeInteger(number);
            dest.writeList(labels != null ? labels : new ArrayList());
        }
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        private void readFromParcel(Parcel in) {
            number = in.readInteger();
            in.readStringList(labels);
        }
    
        public static final Creator<Example2> CREATOR = new Creator<Example2>() {
            @Override
            public Example2 createFromParcel(Parcel in) {
                return new Example2(in);
            }
    
            @Override
            public Example2[] newArray(int size) {
                return new Example2[size];
            }
        };
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 2012-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多