Страница 1 из 1

Создать массив со значениями из ресурсов

Добавлено: 03 фев 2015, 11:34
grem17
всем привет

имеется большой список по типу "имя, значение", хочу создать его в ресурсах, например через string

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="red">color1</string>
    <string name="green">color2</string>
.......
</resources>
вопрос, как заполнить этими данными массив?
в дальнейшем массив будет обрабатываться в цикле и на основе "имени" будет извлекаться "значение"

Re: Создать массив со значениями из ресурсов

Добавлено: 03 фев 2015, 12:55
grem17
частично разобрался, массив со значениями можно создать через вложенный массив

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="Sm">sm.gif</string>
    <string name="Sa">sa.gif</string>
    
    <string-array name="s_array">
    	<item>"@string/Sm"</item>
    	<item>"@string/Sa"</item>	
	</string-array>
</resources>

Resources res = context.getResources();			
String[] sk_verb_array = res.getStringArray(R.array.s_array); // Получаем массив из ресурсов	
ArrayList<String> sk_verb = new ArrayList<String>();
sk_verb.addAll(Arrays.asList(sk_verb_array));
			
			for (int i = 0; i < sk_verb.size(); i++) {
				String dd = sk_verb.get(i).toString();
				Log.d("1", dd);
			}
в итоге получаю строку
@string/Sm
@string/Sa

а как получить на которую ссылается например @string/Sm ?

или как из строки @string/Sm получить значение ресурса?

Re: Создать массив со значениями из ресурсов

Добавлено: 03 фев 2015, 18:27
altwin
Чем вас не устраивает HashMap ?

Re: Создать массив со значениями из ресурсов

Добавлено: 04 фев 2015, 08:24
grem17
HashMap можно заполнить из ресурсов (res\values\strings.xml)?
допустим я могу создать в коде перечень инфы для добавления, в виде "ключ-значение", это я и раньше мог сделать, интересует именно способ заполнения массива из ресурсов

Re: Создать массив со значениями из ресурсов

Добавлено: 04 фев 2015, 08:31
grem17
нашел неплохой пример, думаю это сработает
надо заполнить 2 массива, одинаковым кол-ом строк-значений

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="countries_names">
        <item>USA</item>
        <item>Russia</item>
    </string-array>

    <integer-array name="countries_codes">
        <item>1</item>
        <item>7</item>
    </integer-array>
</resources>

String[] countriesNames = getResources().getStringArray(R.array.countries_names);
int[] countriesCodes = getResources().getIntArray(R.array.countries_codes);

HashMap<String, Integer> myMap = new HashMap<String, Integer>();
for (int i = 0; i < countriesNames.length; i++) {
    myMap.put(countriesNames[i], countriesCodes[i]);
}

Re: Создать массив со значениями из ресурсов

Добавлено: 05 фев 2015, 12:00
grem17
еще вопрос по теме, вложенный массив имеет ссылки на графические ресурсы, которые я потом буду использовать в проге...
после обработки, получаю на выходе строковое значение String с вот таким значем \res\drawable\aa (это картинка), а как мне строку преобразовать в ресурс и использовать ее? или как хранить ссылку на ресурс, чтобы потом его можно было использовать по назначению?

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="key">
<item>aa</item>
<item>bb</item>
</string-array>

<string-array name="value">
<item>@drawable/aa</item>
<item>@drawable/bb</item>
</string-array>
</resources>

Re: Создать массив со значениями из ресурсов

Добавлено: 05 фев 2015, 12:31
grem17
все, нашел сам

public static int getResourseId(String pVariableName, String pResourcename, String pPackageName)
{
try {
return getResources().getIdentifier(pVariableName, pResourcename, pPackageName);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}

getResourseId("myIcon", "drawable", getPackageName());