java - 什么时候在android中使用parcelable?

标签 java android

我习惯于在 ios 中进行开发,我从不需要将模型设为可分割,所以这个概念对我来说不是很清楚。 我有一个类似“游戏”的类:

//removed the method to make it more readable.
public class Game implements Parcelable {
    private int _id;
    private ArrayList<Quest> _questList;
    private int _numberOfGames;
    private String _name;
    private Date _startTime;

    public Game(String name, ArrayList<Quest> quests, int id){
        _name = name;
        _questList = quests;
        _numberOfGames = quests.size();
        _id = id;
    }
}

我想启动一个 Activity 并按照我的 Intent 将游戏对象传递给该 Activity ,但事实证明默认情况下您不能传递自定义对象,但它们需要是可分割的。所以我添加了:

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

    public Game[] newArray(int size) {
        return new Game[size];
    }
};
private Game(Parcel in) {
    _id = in.readInt();
    _questList = (ArrayList<Quest>) in.readSerializable();
    _numberOfGames = in.readInt();
    _name = in.readString();
    _startTime = new Date(in.readLong());
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel out, int flags) {
    out.writeInt(_id);
    out.writeSerializable(_questList);
    out.writeInt(_numberOfGames);
    out.writeString(_name);
    out.writeLong(_startTime.getTime());
}

但现在我收到自定义数组列表 _questList 不是可打包游戏的警告。

Quest 是一个抽象类,因此无法实现

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

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

所以我的问题是:我什么时候需要实现 parcelable,我是否必须将它添加到我想要传递的每个自定义对象(即使在另一个自定义对象中)?我无法想象他们没有更容易让 android 传递带有自定义对象数组列表的自定义对象的方法。

最佳答案

正如您已经发现的那样,如果您想通过 Intent 发送自己的数据,您需要使其成为可能。在 Android 上,建议使用 Parcelable。您可以自己实现此接口(interface)或使用现有工具,如 ParcelerParcelable Please . 注意:这些工具有一些限制,因此请确保您了解它们,因为有时手动实现 Parcelable 比编写代码来解决它可能更便宜。

is parcelable to only way possible

没有。您可以使用 Serializable(也可以使用 Parcels),但是 Parcelable 是在 Android 上运行的方式,因为它速度更快,而且它是在平台级别上完成的。

关于java - 什么时候在android中使用parcelable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31895942/

相关文章:

java - 为什么 Arrays.asList(charArray).indexOf 总是返回 -1?

java - @Constraint 中的空 validatedBy

android - Android Studio 0.44 中的 Gradle 无法在执行类型任务中运行的路径上找到进程

java - 如何在碧 Jade 报告中显示图像?

java - 有没有一种优雅的方法可以在使用 Guava 转换 Collection 时删除空值?

java - 从文本文件输入对象数组

android - 在 Google Play 上发布应用后更改应用的图标/名称/作者姓名

android - GSON:END_OBJECT 永远不会被调用

java - Android TextView 与 Marquee 和 layout_weight 不滚动

java - 实现点击recycleView行的正确方法 - 传递模型本身