【发布时间】:2014-04-26 04:20:21
【问题描述】:
我知道 putExtra 可用于在活动之间传递对象/字符串。但我正在尝试您将ArrayList 之类的对象放在ArrayList<Foo> 中putExtra
这可能吗?
【问题讨论】:
-
不,但你可以使数组可包裹,包裹它,然后将包裹转储到 putExtra
我知道 putExtra 可用于在活动之间传递对象/字符串。但我正在尝试您将ArrayList 之类的对象放在ArrayList<Foo> 中putExtra
这可能吗?
【问题讨论】:
不,不是。您需要将 serialize 您的对象转换为某种字符串表示形式。一种可能的字符串表示形式是 JSON,如果您问我,在 android 中序列化到/从 JSON 序列化的最简单方法之一是通过 Google GSON。
此外,如果您只是传递对象,那么 Parcelable 就是为此而设计的。与使用 Java 的本机序列化相比,它需要更多的努力,但它的速度更快(我的意思是,速度更快)。
来自文档:
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
【讨论】:
你可以使用
intent.putParcelableArrayListExtra() 在意图中传递 Arraylist。
编辑: 另一个链接:Help with passing ArrayList and parcelable Activity
【讨论】:
仅适用于非常有限且特定类型的“Foo”。如果我没记错的话 Double 和 Long(或者可能是 Integer?)就是这些类型。可能有一种方法可以通过将更通用的 ArrayList 封装在一些可序列化的对象中来偷运它,但我不确定。
【讨论】: