2013-02-04 14 views
5

Ho un array di stringhe definito arrays.xml che fa riferimento a due stringhe in strings.xml:Ottenere l'indice di un elemento dell'array in base al valore

<string-array name="my_options"> 
    <item>@string/my_string_one</item> 
    <item>@string/my_string_two</item> 
</string-array> 

<string name="my_string_one">Value 1</string> 
<string name="my_string_two">Value 2</string> 

ho bisogno di ottenere la posizione di un elemento in la matrice, in base al valore della stringa. La stringa I.e "Valore 2" ha un indice di 1. Posso ovviamente solo codificare i valori posizionali (0, 1, ecc.), Ma si interromperà se l'ordine delle stringhe è cambiato. Voglio che il codice sia indipendente dalla posizione. I seguenti lavori:

int value = Arrays.asList((getResources().getStringArray(R.array.my_options))).indexOf(getString(R.string.my_string_one)); 

C'è un modo più compatto e più semplice per farlo?

+0

potresti approfondire ciò che stai facendo? Sto pensando magari a usare un file XSL per trasformare l'xml in XML che vuoi, in modo che tu possa hardcode dove il valore sarà nel nuovo xml. Ha senso? – Malachi

risposta

7

Il codice che mostri nella tua domanda è fondamentalmente quello che devi fare.

Tuttavia, si potrebbe refactoring in qualche modo per renderlo più leggibile: Refactor Arrays.asList (. (GetResources() getStringArray (R.array.my_options))) in un elenco (non so come le tue app di il codice sembra, ma potresti essere in grado di memorizzare questo elenco come campo di istanza o anche come campo statico (di classe).

static List<String> myOptions; 

.... 
    if (myOptions == null) { 
     myOptions = Arrays.asList((getResources().getStringArray(R.array.my_options))); 
    } 

... 

    int value = myOptions.indexOf(getString(R.string.my_string_one)); 
0

Forse un HashSet potrebbe aiutarti o qualcosa del genere, in cui inserisci il tuo nome della stringa come chiave e il valore come valore. Quindi puoi selezionare il valore con il nome della chiave.

Problemi correlati