У меня есть класс SuperMedia, который реализует Parcelable. Одно из полей класса является потомком ArrayList. Когда я создаю Bundle и пытаюсь передать объект «SuperMedia» из одного действия в другое, все поля передаются нормально, за исключением «дочерних элементов» ArrayList, которые каждый раз отображаются как пустые.
В моем первом действии я делаю:
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
? или есть его потомки? - person njzk2   schedule 08.05.2014public ArrayList<SuperMedia> children = new ArrayList();
наpublic List<SuperMedia> children = new ArrayList();
. - person erakitin   schedule 08.05.2014SuperMedia implements Parcelable
, но это не работает ни для чегоextends SuperMedia
, потому чтоSuperMedia.CREATOR
может вызывать толькоnew SuperMedia(in)
- person njzk2   schedule 08.05.2014List<SuperMedia>
, не так ли? - person njzk2   schedule 09.05.2014