2013-03-21 4 views
11

Ich habe eine Schnittstelle IA und Klasse B und C, die sie implementieren. Sowohl B als auch C implementieren auch Parcelable.Android Parcel - Schreiben und lesen Arraylist < IA > wenn IA ist eine Schnittstelle

Dann habe ich den schwierigen Teil:

Klasse D ein ArrayList<IA> hat. Ich brauche dazu auch beide Klassen B und C in die arraylist. Sie teilen die gleiche Struktur, aber die "IS-A" Beziehung gilt nicht.

Ich muss D von einer Aktivität an eine andere als Paket übergeben.

habe ich versucht, (ArrayList<IA>) in.readSerializable zu schreiben, aber ich bekam einen IOException. Ich weiß, dass, wenn IA keine Schnittstelle war, das Problem einfach war, aber ich kann keine einfache Lösung dafür finden.

Irgendwelche Ideen?

@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); 
} 
+0

IA sollte Parcelable – njzk2

+0

und D in.readArrayList (Liste, Creator) erweitern? aber welcher Schöpfer? –

+0

Können Sie einen Code mit der Parcelable-Methode der Klasse D posten, um einen Blick darauf zu werfen. –

Antwort

32
@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); 
} 
+0

Ich habe ein Problem, ich denke, dass Sie helfen können. Ich habe ArrayList >, die ich in Parzelle schreiben und dann in der nächsten Aktivität lesen möchte. Können Sie bitte Anleitung dafür geben? – Gem

+0

check this one http://stackoverflow.com/questions/13228714/set-arraylist-hashmap-string-object-value –

+0

Danke! Es funktioniert –

1

Ich empfehle Ihnen "Android Parcel Code-Generator" Plugin zu installieren. Danach können Sie writeToParcel Funktion generieren, Konstruktor, der nur aus Paket und Ersteller Klasse mit Alt+Insert Tasten liest.

Verwandte Themen