2013-03-21 9 views
11

Ho un interfaccia IA e di classe B e C che li implementano. Sia B che C implementano anche Parcelable.Android Parcelable - Scrivere e leggere ArrayList < IA > quando IA è un'interfaccia

allora ho la parte difficile:

Classe D ha un ArrayList<IA>. Mi serve anche inserire entrambe le classi B e C nello arraylist. Condividono la stessa struttura ma la relazione "IS-A" non si applica.

Devo passare D da un'attività a un'altra come pacco.

Ho provato a scrivere (ArrayList<IA>) in.readSerializable ma ho ottenuto uno IOException. So che se IA non era un'interfaccia il problema era facile, ma non riesco a trovare una soluzione facile per questo.

Qualche idea?

@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 deve estendere Parcelable – njzk2

+0

e D utilizzare in.readArrayList (elenco, Creatore)? ma quale creatore? –

+0

Potresti postare qualsiasi codice con il metodo Parcelable della classe D'per dare un'occhiata. –

risposta

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

ho un problema penso che tu possa aiutare. Ho ArrayList > che voglio scrivere per pacchi e poi leggerlo nella prossima attività. Puoi per favore guidare come farlo? – Gem

+0

controlla questo http://stackoverflow.com/questions/13228714/set-arraylist-hashmap-string-object-value –

+0

Grazie! Sta funzionando –

1

vi consiglio di installare "Parcelable Android generatore di codice" plugin. Successivamente è possibile generare la funzione writeToParcel, costruttore che legge solo dalla classe parcel e creator con i pulsanti Alt+Insert.

Problemi correlati