2011-03-14 11 views
50

Estoy haciendo un elemento ui compuesto que toma un Objeto (un jugador) y quiero elegir la imagen correspondiente para el equipo para el que juega este jugador (el objeto jugador tiene un valor de cadena para su número de imagen. Tengo las imágenes la carpeta de recursos de mi proyecto¿Cómo configuro un origen de ImageViews programáticamente en Android?

¿Cómo especifico la fuente correcta para cada jugador? Es un caso de escribir una gran cantidad de ifs y elses (verificar el valor de la cadena) y usar res.getDrawable (R.drawable .no1), etc o hay una solución más elegante en el que puedo utilizar una cadena de alguna manera para especificar la ruta a la fuente

Respuesta

88

que había puesto la relación entre las cuerdas y las imágenes en un mapa:?

Map<String, Integer> map = new HashMap<String, Integer>(); 
map.put("blah", R.drawable.blah); 
// etc... 

A continuación, puede utilizar la setImageResource(int) método:

ImageView image; 
image.setImageResource(map.get("blah")); 

O, si las cuerdas tienen el mismo nombre que la imagen (como en el caso anterior), puede cargar el recurso mediante el uso de este método: Android and getting a view with id cast as a string

+0

Darn, vencerme por 26 segundos :) –

+1

@MohitDeshpande: jajajajaja pasa todo el tiempo. – Cristian

+1

Sí, esto funciona genial. Olvidé que R.etc devuelve Ints:/¡Gracias! – blackaardvark

3

si he entendido bien, desea mostrar un recurso de imagen de una cadena. Lo hago en una aplicación donde el usuario puede elegir una imagen de un ListPreference personalizado y se muestra en el diseño de MainActivity. La ID del recurso dibujable se almacena en las Preferencias Compartidas como una cadena que coincide con el ejemplo del ID del recurso dibujable (Cadena): "@ drawable/logo_image". Saco el valor de la ListPreference con:

SharedPreferences shared = getSharedPreferences("com.joshuariddle.recoveryworkscounter.settings", MODE_PRIVATE); 
      String logo_id = (shared.getString("pref_logo","")); 

Esto devuelve el recurso estirable como una cadena, es decir @ dibujable/LOGO_IMAGE. Luego de insertar que estirable/imagen en mi diseño que utilizo:

ImageView iv_logo = (ImageView) findViewById(R.id.imgLogo); 
    iv_logo.setImageResource(getResources().getIdentifier(logo_id, "drawable", "com.yourpackage")); 

Esto cambiará el recurso ImageView a la nueva estirable con setImageResource() con el int devuelto por el método siguiente que devuelve un ID (int) de una cadena que representa el recurso estirable en com.yourpackage:

getResources().getIdentifier(logo_id, "drawable", "com.yourpackage") 

también puede utilizar este mismo método para cambiar otros recursos que utilizan estirable como Disposición fondos etc. Sólo tienes que utilizar este método para obtener el ID como un int:

getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage") 
Cuestiones relacionadas