2010-10-13 25 views
9

Tengo un ListView que muestra los nombres de los países. He almacenado los nombres en strings.xml como un conjunto de cadenas llamado country_names.Uso de HashMap para asignar una cadena e int

En poblar el ListView, Puedo utilizar un ArrayAdapter la que se lee de 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); 

Ahora también tengo un countryCode para cada país. Cuando se hace clic en el nombre de un país en particular en ListView, debo brindar por el CountryCode correspondiente.

Entiendo que la implementación de un HashMap es la mejor técnica para esto. Hasta donde yo sé, el HashMap se rellena con la función put().

myMap.put("Country",28); 

Ahora mis preguntas son:

  1. ¿Es posible leer la matriz string.xml y lo utilizan para poblar el mapa? Quiero decir, quiero agregar elementos al Mapa, pero debo ser capaz de hacerlo leyendo los elementos de otra matriz. ¿Cómo puedo hacer esto?

    La razón básica por la que pregunto es porque quiero mantener los nombres de los países y los códigos en un lugar donde sea más fácil agregarlos, eliminarlos o modificarlos.

  2. Las cadenas de matrices se almacenan en strings.xml. ¿Dónde deben almacenarse matrices de enteros similares? En la carpeta de valores, pero bajo cualquier archivo XML específico?

Respuesta

26
  1. Como una de las posibilidades, puede almacenar 2 conjuntos diferentes en XML: matriz de cadenas y la matriz entera, y luego mediante programación ponerlos en el HashMap.

    Definición de matrices:

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

    Y código:

    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. Puede ser un archivo con cualquier nombre.

+0

Hola, Sergey. Quiero saber CÓMO poner programáticamente los valores en HashMap. ¿Podría compartir un fragmento de código en su respuesta? En cuanto a 2), gracias, eso es lo que estaba buscando. – kiki

+0

He editado mi respuesta. –

+0

¡Oye, muchas gracias! Estaba confundido si put() funcionaría de esa manera. – kiki