J'ai une interfaceIAet une classeBetCqui les implémentent. B et C implémentent également Parcelable
.
Ensuite, j'ai la partie la plus délicate:
La classeDa un ArrayList< IA >
. J'ai aussi besoin de cela pour insérer les classes B et C dans la variable arraylist
. Ils partagent la même structure mais la relation "IS-A" ne s'applique pas.
Je dois passer D d'une activité à une autre en tant que parcelle.
J'ai essayé d'écrire (ArrayList<IA>) in.readSerializable
mais j'ai unIOException
. Je sais que si IA n'était pas une interface, le problème était facile, mais je ne semble pas pouvoir trouver une solution facile pour cela.
Des idées?
@SuppressWarnings("unchecked")
public D (Parcel in) {
list = new ArrayList<IA>();
(...)
list = (ArrayList<IA>) in.readSerializable
}
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
public D createFromParcel(Parcel in) {
return new D(in);
}
public D[] newArray(int size) {
return new D[size];
}
};
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
(...)
dest.writeList(list);
}
@SuppressWarnings("unchecked")
public D (Parcel in) {
list = new ArrayList<IA>();
(...)
//ERROR -> list = (ArrayList<IA>) in.readSerializable
list = in.readArrayList(IA.class.getClassLoader());
}
@SuppressWarnings("rawtypes")
public static final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
public D createFromParcel(Parcel in) {
return new D(in);
}
public D[] newArray(int size) {
return new D[size];
}
};
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel dest, int flags) {
(...)
dest.writeList(list);
}
Je vous recommande d'installer le plug-in "Générateur de code Android Parcelable". Après cela, vous pouvez générer la fonction writeToParcel
, constructeur qui lit à partir de la classe de parcelles et de créateurs uniquement en cliquant sur les boutons Alt+Insert
.