2013-02-22 8 views
6

Ich versuche, meine Klasse parcelable zu machen, aber es hat eine Liste von enums innerhalb.Wie erstelle ich eine Liste <enum> parcelable?

Ich habe schon gesehen, wie diese here ... mit einzelnen Aufzählungen, dies zu tun

Wie könnte ich tun?

Danke! ;)

+2

Wenn Sie eine parcel Enum machen können, dann sehen [diese Frage] (http://stackoverflow.com/questions/7042272/how-to-properly-implement -parcelable-with-a-arraylistparcelable? rq = 1), damit es mit der Liste funktioniert. – Geobits

+0

Danke, @Geobits! – mvalencaa

Antwort

12

Ok, ich löste das nur mit den Informationen unter dem oben genannten Link.

Das war, was ich tat:

public enum Improvement {ENUM1, ENUM2, etc} 

public void writeToParcel(Parcel dest, int flags) { 
    ... 
    List<String> improvementStrings = new ArrayList<String>(); 
    for (Improvement improvement : improvements) { 
     improvementStrings.add(improvement.name()); 
    } 
    dest.writeList(improvementStrings); 
} 

public void readFromParcel(Parcel in) { 
    ... 
    List<String> improvementStrings = new ArrayList<String>(); 
    in.readList(improvementStrings, null); 
    for (String improvementString : improvementStrings) { 
     improvements.add(Improvement.valueOf(improvementString)); 
    } 
} 
+10

Es ist wahrscheinlich schneller, "improvement.ordinal()" zu serialisieren, was ein int ist, anstatt "improvement.name()". Dadurch wird vermieden, dass immer wieder dieselben Zeichenketten wiederholt werden. Dann auf der Empfangsseite, Verbesserungswert = Improvement.values ​​() [ordinal] '(und Sie können' Improvement.values ​​() 'in einer lokalen Variablen zwischenspeichern). –

+0

Großer Vorschlag, @ JonO! – mvalencaa