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

Android: Can I pass an array of Parcelable objects? Do I need to create a wrapper object?

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

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

我已经为单个任务编写了所有 Parcelable 代码。但现在我正在开发一个需要一系列任务的新 activity。一方面,我可以创建一个 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 将如何使用此函数来处理一组任务。如何传递任务数组而不是创建任务列表?

首先有一个插件可以为您的对象生成 parcelable 代码,它会节省您的时间,其次您需要做的就是通过以下方式将其添加到 intent 中:

intent.putParcelableArrayListExtra(TASK_LIST,taskList);

您可以找到此屏幕截图中说明的插件

假设,您想要将列表从 Activity A 传递到 B。

在 Activity 中:

intent.putParcelableArrayList("task_list", actualListObject);

在Activity B 中获取数据:

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

像这样将数组列表写入 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% 适合我。