【问题标题】:Android: Can I pass an array of Parcelable objects? Do I need to create a wrapper object?Android:我可以传递 Parcelable 对象的数组吗?我需要创建一个包装对象吗?
【发布时间】:2016-12-03 22:39:40
【问题描述】:

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

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

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

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代码,它会节省你的时间,其次你需要做的是通过parcelable数组将它添加到intent by (intent.putParcelableArrayListExtra(TASK_LIST ,任务列表);

标签: android arrays parcelable


【解决方案1】:

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

intent.putParcelableArrayListExtra(TASK_LIST,taskList);

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

【讨论】:

    【解决方案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% 适合我。

    【讨论】:

      【解决方案3】:

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

      在活动 A 中:

      intent.putParcelableArrayList("task_list", actualListObject);
      

      在活动 B 中获取数据:

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

      【讨论】:

        猜你喜欢
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        • 2013-04-08
        • 2017-10-09
        相关资源
        最近更新 更多