views:

44

answers:

1

Hi,

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 List, I need to Toast the correspoding 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:

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 to do this?

The basic reason for my asking is because I want to keep the Country names and codes in a place where it is easier to add/remove/modify.

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?

Regards, kiki

+2  A: 

1) As one of the possibilities you may store 2 different arrays in XML: string array and integer array and then prorammatically 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 file with any name. See http://d.android.com/guide/topics/resources/more-resources.html#IntegerArray

Sergey Glotov
Hi, Sergey. I want to know HOW to programmatically put the values into the HashMap.Could you share a code snippet in your answer. As to 2), thanks, that is what I was looking for.
kiki
I've edited my answer.
Sergey Glotov
Hey, thanks a lot! I was confused whether put() would work that way.
kiki