【发布时间】:2014-06-26 07:56:12
【问题描述】:
我有一个名为 SuperMedia 的类,它实现了 Parcelable。该类的字段之一是 ArrayList 子级。当我创建一个Bundle并尝试将“SuperMedia”对象从一个活动传递到另一个活动时,所有字段都可以正常传递,但ArrayList“children”除外,它每次都显示为空。
在我的第一个活动中:
Bundle a = new Bundle();
a.putParcelable("media",media); //media is an object of type "SuperMedia" and all the "children" have been initialized and added to the array
final Intent i = new Intent("com.tv.video.subcategories");
i.putExtra("subcategories", a);
在我的第二个活动中:
Intent i = getIntent();
Bundle secondBun = i.getBundleExtra("subcategories");
SuperMedia media = secondBun.getParcelable("media"); //For some reason the ArrayList"children" field shows up as empty.
我不确定为什么会这样。如果有人能引导我走上正确的道路,将不胜感激。下面是我的 SuperMedia 课程。
public class SuperMedia implements Parcelable{
public URI mthumb;
public String mTitle;
public ArrayList<SuperMedia> children = new ArrayList();
public SuperMedia(URI thumb, String title) {
this.mthumb = thumb;
this.mTitle = title;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(mTitle);
dest.writeString(mthumb.toString());
dest.writeTypedList(children);
}
public static final Parcelable.Creator<SuperMedia> CREATOR = new Parcelable.Creator<SuperMedia>() {
public SuperMedia createFromParcel(Parcel in) {
return new SuperMedia(in);
}
public SuperMedia[] newArray(int size) {
return new SuperMedia[size];
}
};
private SuperMedia(Parcel in) {
mTitle = in.readString();
try {
mthumb = new URI(in.readString());
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
in.readTypedList(children, SuperMedia.CREATOR);
}
public SuperMedia(){
}
}
【问题讨论】:
-
children包含SuperMedia的实例?还是有它的后代? -
@njzk2 它包含后代
-
那么它就无法工作,因为 SuperMedia.CREATOR 不知道如何解包这些。
-
您的代码似乎应该可以工作。我不确定,但尝试将
public ArrayList<SuperMedia> children = new ArrayList();更改为public List<SuperMedia> children = new ArrayList();。 -
@erakitin:这不会改变任何东西,因为 ArrayList 是一个列表。另外,这里的实际问题是
SuperMedia implements Parcelable,但这不适用于extends SuperMedia,因为SuperMedia.CREATOR只能调用new SuperMedia(in)
标签: java android arraylist parcelable