我创建了一个名为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?
答案 0 :(得分:2)
首先有一个插件可以为你的对象生成parcelable代码,它会节省你的时间,第二个你需要做的就是通过parcelable数组来将它添加到intent中:
intent.putParcelableArrayListExtra(TASK_LIST,taskList);
答案 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%适合我。