捆绑的arraylist数组

时间:2011-08-05 14:23:42

标签: android arrays arraylist

如何将arrayList数组放入Bundle?

ArrayList < myObjects >[] mElements;

4 个答案:

答案 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