ho:Android - Aperto risorsa da String @drawable
String uri = "@drawable/myresource.png";
Come posso caricare che in ImageView? this.setImageDrawable?
ho:Android - Aperto risorsa da String @drawable
String uri = "@drawable/myresource.png";
Come posso caricare che in ImageView? this.setImageDrawable?
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);
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
.
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.
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
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);
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);
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;
...
...
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
Ricorda che lo studio Android lo vede come risorsa inutilizzata quindi "refactoring/rimuovi risorse inutilizzate" non funziona per esso – gturedi
Ricorda che devi non aggiungere l'estensione dell'immagine all'URI e devi aggiungere "drawable /" al tuo primo URI –