gpt4 book ai didi

android - 使自定义对象的 ArrayList 可打包

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:53:08 26 4
gpt4 key购买 nike

我有两个类创建我需要通过 Intent 传递的对象,我目前正在尝试实现 Parcelable 来执行此操作。

import android.os.Parcel;
import android.os.Parcelable;

public class Item implements Parcelable {

private String name;
private double price;
private int buyerCount = 0;

public Item(String name, double price) {
this.name = name;
this.price = price;
}

private Item(Parcel in) {
name = in.readString();
price = in.readDouble();
}

public static final Parcelable.Creator<Item> CREATOR = new Parcelable.Creator<Item>() {
public Item createFromParcel(Parcel in) {
return new Item(in);
}

public Item[] newArray(int size) {
return new Item[size];
}
};

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

public double getPrice() {
return price;
}

public int getBuyerCount() {
return buyerCount;
}

public void incrementBuyerCount() {
buyerCount += 1;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeDouble(price);
}
}

从目前的测试来看,我的 Item 对象似乎在我 bundle 它时正确地传输了信息。

但是我的第二个类 Diner 包含一个对象 Item 的 ArrayList,我不确定如何在这个类中正确实现 Parcelable,特别是在我评论过的部分。我看到有一个 readParsableArray() 方法,但没有用于 ArrayLists 的方法。

import android.os.Parcel;
import android.os.Parcelable;

import java.util.ArrayList;

public class Diner implements Parcelable {

private String name;
private ArrayList<Item> itemList = new ArrayList<Item>();

public Diner(String name) {
this.name = name;
}

private Diner(Parcel in) {
name = in.readString();
// How to read in ArrayList itemList of item objects?
itemList = in.readParcelableArray();
}

public static final Parcelable.Creator<Diner> CREATOR = new Parcelable.Creator<Diner>() {
public Diner createFromParcel(Parcel in) {
return new Diner(in);
}

public Diner[] newArray(int size) {
return new Diner[size];
}
};

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

@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
// How to write ArrayList itemList of item objects?
dest.writeParcelableArray(itemList);
}

public void addItem(Item foodItem) {
itemList.add(foodItem);
foodItem.incrementBuyerCount();
}

public double getPrice() {
double total = 0;
for(Item item : itemList) {
total += item.getPrice() / item.getBuyerCount();
}
return total;
}

public String toString() {
return name;
}

}

最佳答案

使用writeTypedListreadTypedList

parcel.writeTypedList(yourList);

parcel.readTypedList(yourList, YourParcelable.CREATOR);

请注意您是如何将 CREATOR 作为参数传递给回读列表的。

关于android - 使自定义对象的 ArrayList 可打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28902341/

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