intent.put附加Parcelable对象和枚举的列表] >

问题描述 投票:5回答:3

此问题与所有其他问题不同,因为在这里,可打包对象的列表是在外部通过Intent快速发送的,是在外部即时创建的。

问题:产品是可包裹的,但自定义List<Product>不是。如何制作ListParcelable??

产品

public class Product implements Parcelable {

    public String id;
    public String name;

    public Product(String id, String name) {
        this.id = id;
        this.name = name;
    }

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

    protected Product(Parcel in) {
        id = in.readString();
        name = in.readString();
    }

    public static final Creator<Product> CREATOR = new Creator<Product>() {
        @Override
        public Product createFromParcel(Parcel in) {
            return new Product(in);
        }

        @Override
        public Product[] newArray(int size) {
            return new Product[size];
        }
    };

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeString(id);
        parcel.writeString(name);
    }
}

活动分类

Intent intent = new Intent(this, ShowProducts.class);
List<Product> products = getSpecificProducts();

intent.putExtra("PRODUCTS", products); // error

startActivity(intent);

编辑

这个问题有两个,不是重复的,另一部分是List<Enum>

public enum Department implements Parcelable {

    SALES("Sales", 0),
    HR("HR", 1),

    public String name;
    public int ordinal;

    Department(String name, int ordinal) {
        this.name = name;
        this.ordinal = ordinal;
    }

    public static final Creator<Department> CREATOR = new Creator<Department>() {
        @Override
        public Department createFromParcel(Parcel in) {
            return Department.values()[in.readInt()];
        }

        @Override
        public Department[] newArray(int size) {
            return new Department[size];
        }
    };

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

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(ordinal);
    }

}

根据建议的答案,我已经尝试过。

List<Department> departments = getSpecificDepartments();

intent.putParcelableArrayListExtra("Departments", departments);

错误:不兼容的类型:List<Department>无法转换为ArrayList<? extends Parcelable>

此问题与所有其他问题不同,因为在这里,可打包对象的列表是在外部通过Intent快速发送的,是在外部即时创建的。问题:产品是可包裹的...

android parcelable
3个回答
1
投票

您无需将列表设为可拆分。简而言之,只需使用现有方法即可。


2
投票

使用像这样的putParcelableArrayListExtra方法:


0
投票

尝试此

© www.soinside.com 2019 - 2024. All rights reserved.