首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android Parcelable用法

Android Parcelable用法
EN

Stack Overflow用户
提问于 2015-06-26 07:04:22
回答 2查看 93关注 0票数 0

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

代码语言:javascript
运行
复制
class Example {
    Integer age;
    String name;
    Collection<Example2>examples;

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

我如何让这个类实现Parcelable,这样我就可以跨活动发送它的对象了。

EN

回答 2

Stack Overflow用户

发布于 2015-06-26 07:13:14

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

票数 1
EN

Stack Overflow用户

发布于 2015-06-26 08:50:39

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

所以你的类应该是这样的:

代码语言:javascript
运行
复制
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];
        }
    };
}

代码语言:javascript
运行
复制
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];
        }
    };
   }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31062253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档