Home » Android » android – Using HashMap to map a String and int

android – Using HashMap to map a String and int

Posted by: admin May 14, 2020 Leave a comment

Questions:

I have a ListView showing names of countries.
I have stored the names in strings.xml as a string-array called country_names.

In populating the ListView, I use an ArrayAdapter which reads from 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);

Now I also have a CountryCode for each country. When a particular country name is clicked on the ListView, I need to Toast the corresponding CountryCode.

I understand implementing a HashMap is the best technique for this. As far as I know, the HashMap is populated using put() function.

myMap.put("Country",28);

Now my questions are:

  1. Is it possible to read the string.xml array and use it to populate the Map? I mean, I want to add items to the Map, but I must be able to do so by reading the items from another array. How can I do this?

    The basic reason I ask is because I want to keep the country names and codes in a place where it is easier to add/remove/modify them.

  2. The string-arrays are stored in strings.xml. Where must similar integer arrays be stored? In values folder, but under any specific XML file?

How to&Answers:
  1. As one of the possibilities, you may store 2 different arrays in XML: string array and integer array, and then programmatically put them in the HashMap.

    Definition of arrays:

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

    And code:

    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. It may be a file with any name. See this