2015-12-24 14 views
10

Mam tablicę ciągów, który wygląda tak:Get nazwę atrybutu z tablicy ciągów

<string-array name="USA"> 
    <item name="NY">001</item> 
    <item name="LA">002</item> 
    <item name="WA">003</item> 
</string-array> 

mogę dostać te numery przez:

Resources res = getResources(); 
int arryid = res.getIdentifier("USA", "array", getPackageName()); 
String[] numbers = res.getStringArray(arryid); 

Ale jak mogę również uzyskać nazwy (NY, LA, WA)? Pamiętaj, że mam wiele hrabstw ... Może wykorzystujesz inne podejście?

+0

Zamiast tego można utworzyć HashMap. Sprawdź [to] (http://stackoverflow.com/a/13032780/3022836) – Kunu

+0

Spróbuj tego. http://stackoverflow.com/questions/7256514/search-value-for-key-in-string-array-android –

Odpowiedz

6

W official document nie ma name atrybut dla <item>. Więc nie sądzę, że będzie jakiś sposób na zdobycie tych kluczy.

Jednak jeśli chcesz uzyskać nazwę string lub string-array, możesz ją uzyskać programowo, ale nie dla <item>.

1
String[] numbers = getResources().getStringArray(R.array.USA); 

uzyskiwanie danych z użycia tablicy.

numbers[id] 

dodaj tablicę jak ta.

<string-array name="USA"> 
    <item>NY</item> 
    <item>LA</item> 
    <item>WA</item> 
</string-array> 
4

Ponieważ "001" jest tylko indeksem, dlaczego po prostu go nie użyć?

<string-array name="USA"> 
    <item>NY</item> 
    <item>LA</item> 
</string-array> 

Następnie wystarczy użyć index + 1 na stanowisko:

String[] usaStates = getResources().getStringArray(R.array.USA); 

int index = 0; 

String firstStateName = usaStates[index]; 
int firstStatePosition = (index + 1); 

Poza tym, można korzystać z dwóch tablic i scalić je w HashMap:

<string-array name="USA"> 
    <item>NY</item> 
    <item>LA</item> 
</string-array> 

<string-array name="USA_pos"> 
    <item>001</item> 
    <item>002</item> 
</string-array> 

String[] usaStates = getResources().getStringArray(R.array.USA); 
String[] usaStatePositions = getResources().getStringArray(R.array.USA_pos); 

Map <String, String> map = new HashMap<>(usaStates.length); 

for (int i = 0; i < usaStates.length; i++) { 
    map.put(usaStates[i], usaStatePositions[i]); 
}