2013-03-21 9 views
11

Mam interfejs IA i klasę B i C że je realizować. Zarówno narzędzie B, jak i C Parcelable.Android Parcelable - Pisz i czytaj ArrayList < IA > kiedy IA jest interfejsem

Wtedy mam Najtrudniejsze:

Class D ma ArrayList<IA>. Potrzebuję tego również wstawić obie klasy B i C w arraylist. Mają one tę samą strukturę, ale relacja "IS-A" nie ma zastosowania.

Muszę przekazać D z jednego działania do drugiego jako paczki.

Próbowałem napisać (ArrayList<IA>) in.readSerializable, ale mam IOException. Wiem, że jeśli IA nie był interfejsem, problem był prosty, ale nie mogę znaleźć łatwego rozwiązania.

Wszelkie pomysły?

@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 powinien przedłużyć Parcelable – njzk2

+0

i D użyć in.readArrayList (list, Creator)? ale który twórca? –

+0

Czy możesz opublikować dowolny kod za pomocą metody klasy D., aby rzucić okiem. –

Odpowiedz

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

Mam jeden problem, który myślę, że możesz pomóc. Mam ArrayList >, który chcę napisać do paczki, a następnie przeczytać go w następnym działaniu. Czy możesz wskazać, jak to zrobić? – Gem

+0

sprawdź ten http://stackoverflow.com/questions/13228714/set-arraylist-hashmap-string-object-value –

+0

Dziękujemy! To działa –

1

Polecam Ci zainstalować "Android Parcelable generator kodu" wtyczki. Po tym można wygenerować funkcję writeToParcel, konstruktor, który czyta tylko z paczki i klasy twórcy, klikając przyciski Alt+Insert.