gpt4 book ai didi

android - intent.putExtra 一个 Parcelable 对象和枚举的列表

转载 作者:行者123 更新时间:2023-12-04 18:33:03 27 4
gpt4 key购买 nike

这个问题与所有其他问题不同,因为这里的可打包对象列表是在外部动态创建的,只是在之前通过 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);
}
}

Activity 课
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);

error: incompatible types: List<Department> cannot be converted to ArrayList<? extends Parcelable>

最佳答案

您不需要使 List 可打包。说白了,就是用现有的方法。

final Intent i = new Intent(this,SecondActivity.class);
final ArrayList<Product> list = new ArrayList< Product >();
i.putParcelableArrayListExtra(PRODUCT_KEY, list);
startActivity(i);

以几乎相同的方式检索。
final ArrayList<Product> list = this.getIntent()
.getParcelableArrayListExtra(PRODUCT_KEY);

更新

回答你的新问题。你不能通过通用 List里面。因为 List你可以有不同的收藏。要知道系统,使用哪种类型,您需要具有显式类型。
// This will work. 
final ArrayList<Department> departments = getSpecificDepartments();
intent.putParcelableArrayListExtra(DEPARTMENTS_KEY, departments);

关于android - intent.putExtra 一个 Parcelable 对象和枚举的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58562297/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com