Использование HashMap для сопоставления String и int - PullRequest
10 голосов
/ 13 октября 2010

У меня есть ListView, показывающий названия стран.Я сохранил имена в strings.xml как строковый массив с именем country_names .

. При заполнении ListView я использую ArrayAdapter, который читает из strings.xml:

String[] countryNames = getResources().getStringArray(R.array.country_names);
ArrayAdapter<String> countryAdapter = new ArrayAdapter<String>(this, R.layout.checked_list, countryNames);
myList.setAdapter(countryAdapter);

Теперь у меня также есть CountryCode для каждой страны.Когда на ListView щелкают конкретное название страны, мне нужно добавить Toast соответствующего CountryCode.

Я понимаю, что реализация HashMap - лучший метод для этого.Насколько я знаю, HashMap заполняется с помощью функции put ().

myMap.put("Country",28);

Теперь мои вопросы:

  1. Можно ли прочитать строку.XML-массив и использовать его для заполнения карты?Я имею в виду, я хочу добавить элементы на карту, но я должен быть в состоянии сделать это, читая элементы из другого массива.Как я могу это сделать?

    Основная причина, по которой я спрашиваю, заключается в том, что я хочу хранить названия стран и коды в месте, где их проще добавлять / удалять / изменять.

  2. Строковые массивы хранятся в strings.xml.Где должны храниться подобные целочисленные массивы?В папке значений, но под любым конкретным XML-файлом?

1 Ответ

27 голосов
/ 13 октября 2010
  1. В качестве одной из возможностей вы можете сохранить в XML два разных массива: строковый массив и целочисленный массив, а затем программно поместить их в HashMap.

    Определение массивов:

    <?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]);
    }
    
  2. Это может быть файл с любым именем. Смотрите это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...