Получить имя атрибута из массива строк
У меня есть строковый массив, который выглядит так:
<string-array name="USA">
<item name="NY">001</item>
<item name="LA">002</item>
<item name="WA">003</item>
</string-array>
Я могу получить эти числа:
Resources res = getResources();
int arryid = res.getIdentifier("USA", "array", getPackageName());
String[] numbers = res.getStringArray(arryid);
Но как я могу получить имена (NY, LA, WA)?
Обратите внимание, что у меня много графств... Может быть, используется другой подход?
Ответы
Ответ 1
В официальном документе нет атрибута name
для <item>
. Поэтому я не думаю, что будет какой-то способ получить эти ключи.
Однако, если вы хотите получить имя string
или string-array
, вы можете получить его программно, но не для <item>
.
Ответ 2
Поскольку "001" - это просто индекс, почему бы просто не использовать это?
<string-array name="USA">
<item>NY</item>
<item>LA</item>
</string-array>
Затем просто используйте index + 1
для позиции:
String[] usaStates = getResources().getStringArray(R.array.USA);
int index = 0;
String firstStateName = usaStates[index];
int firstStatePosition = (index + 1);
В стороне, вы можете использовать два массива и объединить их в 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]);
}
Ответ 3
String[] numbers = getResources().getStringArray(R.array.USA);
чтобы получить данные из массива.
numbers[id]
Добавьте массив, подобный этому.
<string-array name="USA">
<item>NY</item>
<item>LA</item>
<item>WA</item>
</string-array>