如何将arrayList数组放入Bundle?
ArrayList < myObjects >[] mElements;
答案 0 :(得分:4)
让YourObject
实现Parcelable
界面,然后使用bundle.putParcelableArraylist(theParcelableArraylist)
。
编辑:哎呀误读了这个问题。你为什么要保存一系列的arraylist?如果它坚持改变方向,也许你想用onRetainNonConfigurationInstance
代替?
编辑2:好的,这里有。创建一个实现Wrapper
的新Parcelable
类(请注意,myObjects
也必须是parcelable)。 writeToParcel
方法看起来像这样:
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mElements.length);
for(ArrayList<MyObject> element : mElements) {
dest.writeParcelableArray(element.toArray(new MyObject[0]), flags);
}
}
构造函数:
private Wrapper(Parcel in) {
int length = in.readInt();
//Declare list
for (int i = 0; i < length; i++) {
MyObject[] read = in.readParcelableArray(Wrapper.class.getClassLoader());
//add to list
}
}
答案 1 :(得分:1)
不可能使用bundle,因为bundle只允许原语的arraylist ...
尝试使用parcleable或应用程序级数据或静态变量(不良做法)。
答案 2 :(得分:0)
如果您的对象支持使用Serializable
界面标记的序列化,那么您应该可以使用bundle.putSerializable
。
ArrayList
支持Serializable
,但我不确定普通array
。
答案 3 :(得分:0)
我只是使用putSerializable(myarraylistofstuff)
然后我使用get()
使用强制转换回来,你只需要保持未经检查的警告。我怀疑(如果错误,请纠正我)你可以将任何伪造的对象传递给Serializable
,只要你停留在相同的过程中它就会传递对象引用。将数据传递给另一个应用程序时,这种方法显然不起作用。
编辑:目前android只在片段之间传递引用,我试图将任意对象传递给Activity
,它工作但对象不同,同样的测试使用Fragment
的参数显示相同的Object
。
无论如何,它反序列化并序列化我的Object
,如果您有很多对象,最好使用Parcel