此问题与所有其他问题不同,因为在这里,可打包对象的列表是在外部通过Intent快速发送的,是在外部即时创建的。
问题:产品是可包裹的,但自定义List<Product>
不是。如何制作List
Parcelable
??
产品
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快速发送的,是在外部即时创建的。问题:产品是可包裹的...
您无需将列表设为可拆分。简而言之,只需使用现有方法即可。
使用像这样的putParcelableArrayListExtra
方法:
尝试此