Android:我可以传递一个Parcelable对象数组吗?我需要创建一个包装器对象吗?

时间:2016-12-03 22:39:41

标签: android arrays parcelable

我创建了一个名为Task的Parcelable Object,如下所示

public final class Task implements Parcelable {
    // Lots of code, including parceling a single task
}

我已经为单个任务编写了所有Parcelable代码。但是现在我正在开展一项需要一系列任务的新活动。一方面,我可以创建一个TaskList

public class TaskList implements Parcelable { 
     List<Task> taskList;
     // other stuff
}

但这意味着我必须创建一个新对象并重写很多Parcelable逻辑(即使它几乎完全相同)。相反,如果我能以某种方式传递一系列任务,那将是非常好的。但我看到的唯一功能就是这个功能。

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

        // This one......
        public Task[] newArray(int size) {
            return new Task[size];
        }
        // This one......
    };

而且我不确定Parceable如何使用此函数来处理任务数组。如何传递任务数组而不是创建TaskList?

3 个答案:

答案 0 :(得分:2)

首先有一个插件可以为你的对象生成parcelable代码,它会节省你的时间,第二个你需要做的就是通过parcelable数组来将它添加到intent中:

intent.putParcelableArrayListExtra(TASK_LIST,taskList);

您可以按照此屏幕截图中的说明找到该插件 enter image description here

答案 1 :(得分:2)

假设您要将活动A中的列表传递给B.

在活动A中:

intent.putParcelableArrayList("task_list", actualListObject);

在活动B中获取数据:

ArrayList<Task> receivedList = (Task) getIntent().getParcelableArrayList("task_list");

答案 2 :(得分:2)

执行类似这样的操作,将数组列表写入Parcelable

public class Task implements Parcelable {
     List<Task> taskList;

    @Override
    public void writeToParcel(Parcel dest, int flags) {
         dest.writeValue(taskList);
         ...
    }

    @SuppressWarnings("unchecked")
    private Task(Parcel in) {
        taskList = (List<Task>) in.readValue(List.class.getClassLoader());
        ...
    }
}

它100%适合我。