2013-02-04 21 views
5

Mam tablicy ciąg zdefiniowany w arrays.xml odwołujący dwa ciągi w strings.xml:Zdobądź indeks elementu tablicy, na podstawie wartości

<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> 

Potrzebuję uzyskać pozycję elementu w tablica, w oparciu o wartość ciągu. Np. Łańcuch "Wartość 2" ma indeks 1. Mogę oczywiście zakodować tylko wartości pozycyjne (0, 1, itd.), Ale ulegnie ono zerwaniu, jeśli kolejność łańcuchów zostanie zmieniona. Chcę, żeby kod był niezależny od pozycji. Następujące prace:

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

Czy istnieje bardziej kompaktowy i prostszy sposób na zrobienie tego?

+0

Czy mógłbyś bardziej szczegółowo opisać, co robisz? Zastanawiam się nad możliwością użycia pliku XSL do przekształcenia pliku XML na żądany kod XML, abyś mógł dokonać hardcode, gdzie wartość będzie w nowym xml. Czy to ma sens? – Malachi

Odpowiedz

7

Kod wyświetlany w pytaniu to w zasadzie to, co należy zrobić.

Jednak można to byłaby nieco aby uczynić go bardziej czytelnym: Refactor Arrays.asList (. (GetResources() getStringArray (R.array.my_options))) na liście (nie wiem jak w aplikacji kod wygląda, ale możesz być w stanie zapisać tę listę jako pole instancji lub nawet jako pole statyczne (klasa).

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

Może HashSet może ci pomóc lub coś w tym rodzaju, w którym umieścisz nazwę swojego ciągu jako klucz i wartość jako wartość. Następnie możesz wybrać wartość z nazwą klucza.

Powiązane problemy