2013-02-22 13 views
6

Próbuję uczynić moją klasę parcelable, ale ma ona listę wyliczeń wewnątrz.Jak utworzyć listę z listą <enum>?

Już widziałem, jak to zrobić z pojedynczych teksty stałe here ...

Jak mogę to zrobić?

Dzięki! ;)

+2

Jeśli można dokonać parcelable enum, a następnie zobaczyć [pytanie] (http://stackoverflow.com/questions/7042272/how-to-properly-implement -popakowalny-z-tablicąplikudostępnego? rq = 1), aby działał z listą. – Geobits

+0

Dzięki, @Geobits! – mvalencaa

Odpowiedz

12

Ok, rozwiązałem to po prostu używając informacji pod cytowanym linkiem.

To co zrobiłem:

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

Prawdopodobnie szybszy jest serializowanie 'improvement.ordinal()', które jest int, a nie 'improvement.name()'. Pozwala to uniknąć powtarzania tego samego zestawu ciągów w kółko. Następnie, na odbierającym końcu, 'Improvement value = Improvement.values ​​() [ordinal]' (i możesz buforować 'Improvement.values ​​()' w zmiennej lokalnej). –

+0

Świetna propozycja, @ Jono! – mvalencaa