2010-02-28 7 views

Respuesta

165

Si realmente necesita trabajar con una cadena, intentar algo como esto:

private void showImage() { 
    String uri = "drawable/icon"; 

    // int imageResource = R.drawable.icon; 
    int imageResource = getResources().getIdentifier(uri, null, getPackageName()); 

    ImageView imageView = (ImageView) findViewById(R.id.myImageView); 
    Drawable image = getResources().getDrawable(imageResource); 
    imageView.setImageDrawable(image); 
} 

otra cosa que le recomendaría a trabajar con R. * referencias como esta:

int imageResource = R.drawable.icon; 
Drawable image = getResources().getDrawable(imageResource); 
+2

Estaba cargando el nombre de la imagen de algunos JSON, el URI no contenía "dibujables /" al principio y no recibía ningún recurso. En este caso, puede establecer el segundo parámetro como 'getIdentifier()' en "dibujable" – Flexicoder

+0

tenga en cuenta al usarlo que el estudio de Android lo ve recurso no utilizado por lo que la opción "refactorizar/eliminar recursos no utilizados" no funciona – gturedi

+0

Recuerde que debe no agregue la extensión de imagen al URI y debe agregar "dibujable /" al primero de URI –

25

Primero, no hagas eso, ya que la sintaxis @drawable no tiene sentido en el código Java. Use int resourceId=R.drawable.myresource.

Si por alguna razón termina un nombre de recurso y necesita la ID entera, use getIdentifier() en el objeto Resources.

+4

Gracias, después de que me dio el nombre del método que era fácil de encontrar esta página -> http://www.anddev.org/viewtopic.php?p=35661 – kape123

+0

@ kape123 Gracias por tu comentario. Esto me ayudó a hacerlo funcionar. – nikhil

6

Desde hace mucho tiempo vencida, pero mi favorita es utilizar el Contexto:

context.getApplicationContext().getResources().getDrawable(R.drawable.placeholder_image) 

donde placeholder_image es la identificación del recurso. En su caso, R.drawable.myresource.

El contexto puede ser una actividad o la aplicación. Prácticamente donde sea que esté, tiene referencia al contexto, que puede usar para obtener el contexto de la aplicación.

+0

La respuesta de pfleidi está accediendo al mismo método: las actividades son contextos, por lo que cuando llama a getResources(), usa la actividad actual como contexto para llegar al mismo lugar que tú. Editar: no exactamente igual, está llegando al contexto global de la Aplicación en lugar de usar el contexto de la Actividad (o Servicio) directamente. – MaximumGoat

10

también puede agregar su propia variable ... en mi caso scene.name entre seguí respuestas @pfleidi. c significa contexto.

String uri = "drawable/" + scene.name; 
int imageResource = c.getResources().getIdentifier(uri, null, c.getPackageName()); 

imageList.setImageResource(imageResource); 
4

En caso de que alguien más se encuentre con el problema que tenía, estaba cargando el nombre de la imagen de JSON y luego necesitaba el identificador. El segundo parámetro de getIdentifier se puede configurar como "dibujable". Esta es una ligera variación en otras cosas @-Ramli-Ramli respuesta ...

String uri = details.getString("circle").toLowerCase(); 

int imageResource = context.getResources().getIdentifier(uri, "drawable", context.getPackageName()); 
Drawable image = context.getResources().getDrawable(imageResource); 
viewHolder.unit_circle.setImageDrawable(image); 
0

tuve el mismo problema con el desuso ... etc etc He resuelto de tal manera con la API mínimo de 14 acuerdo .

... 
 
... 
 
ImageView imgPoster = viewCache.getImgPoster(resource); 
 
String uri = "drawable/" + film.getPoster(); 
 
int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName()); 
 
Drawable image = ContextCompat.getDrawable(context, imageResource); 
 
imgPoster.setImageDrawable(image); 
 

 
return convertView; 
 
... 
 
...

Cuestiones relacionadas