2010-02-28 11 views

risposta

165

Se si ha realmente bisogno di lavorare con una stringa, provare qualcosa di simile:

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); 
} 

Altrimenti ti consiglierei di lavorare con R. * riferimenti come questo:

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

Stavo caricando il nome dell'immagine da alcuni JSON, l'URI non conteneva "drawable /" all'inizio e non stavo ottenendo una risorsa. In questo caso puoi impostare il secondo parametro su 'getIdentifier()' su "estraibile" – Flexicoder

+0

Ricorda che lo studio Android lo vede come risorsa inutilizzata quindi "refactoring/rimuovi risorse inutilizzate" non funziona per esso – gturedi

+0

Ricorda che devi non aggiungere l'estensione dell'immagine all'URI e devi aggiungere "drawable /" al tuo primo URI –

25

Innanzitutto, non farlo, poiché la sintassi @drawable non ha significato nel codice Java. Utilizzare int resourceId=R.drawable.myresource.

Se per qualche motivo si carica un nome di risorsa e si richiede l'ID intero, utilizzare sull'oggetto Resources.

+4

Grazie, dopo che mi ha dato il nome del metodo è stato facile da trovare questa pagina -> http://www.anddev.org/viewtopic.php?p=35661 – kape123

+0

@ kape123 Grazie per il tuo commento. Questo mi ha aiutato a farlo funzionare. – nikhil

6

Da tempo in ritardo, ma il mio preferito è quello di utilizzare il contesto:

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

dove placeholder_image è l'ID della risorsa. Nel tuo caso, R.drawable.myresource.

Il contesto può essere un'attività o l'applicazione. Praticamente ovunque tu abbia fatto riferimento al contesto, che puoi usare per ottenere il contesto dell'applicazione.

+0

La risposta di pfleidi è l'accesso allo stesso metodo - Le attività sono contesti, e quindi quando chiama getResources(), sta usando l'attività corrente come contesto per raggiungere lo stesso posto che hai fatto. Modifica: non esattamente la stessa cosa, si arriva al contesto di applicazione globale piuttosto che utilizzare direttamente il contesto di attività (o servizio). – MaximumGoat

10

puoi anche aggiungere la tua variabile .. nel mio caso scene.name tra le seguenti risposte @pfleidi. c sta per contesto.

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

imageList.setImageResource(imageResource); 
4

Nel caso in cui nessun altro si imbatte il problema che ho avuto, mi stava caricando il nome dell'immagine da JSON e poi serviva per ottenere l'identificatore. Il secondo parametro di getIdentifier può essere impostato su "drawable". Questa è una leggera variante @ alia-Ramli-Ramli risposta ...

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

Ho avuto lo stesso problema con il ... obsoleta ecc ecc ho risolto in modo con minimo API 14 ok .

... 
 
... 
 
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; 
 
... 
 
...

Problemi correlati