2012-11-12 19 views
26

Eventuali duplicati:
Android - Open resource from @drawable StringTrova disegnabile da stringa

Prima di tutto mi dispiace per il titolo, ma non so esattamente quale titolo posso impostare.

Ok, ecco la mia domanda:

io recibe da un database esterno di una stringa, ad esempio: 'picture0001'.

Nella cartella res/drawable ho un'immagine il cui nome è picture0001.

Vorrei impostare quell'immagine come sfondo (origine) di un ImageView.

La domanda è, come posso cercare questa immagine con la stringa che ho ricevuto dal database esterno.

Grazie mille.

risposta

113

Sì, è possibile cercarlo per nome utilizzando Resources.getIdentifier().

Context context = imageView.getContext(); 
int id = context.getResources().getIdentifier("picture0001", "drawable", context.getPackageName()); 
imageView.setImageResource(id); 

Non è efficiente, ma funziona per cercare risorse occasionali.

+0

@QuinDa Great ! Non dimenticare di fare clic sul segno di spunta accanto a una risposta se ha funzionato per te: ti aiuterà a ottenere risposte migliori da noi in futuro! ;) – Eric

+0

L'ho provato ma si dice: Vote Up richiede 15 reputazione): – QuinDa

+0

@QuinDa Il segno di spunta, non la freccia su (che, sì, ha bisogno di 15 reputazione). Ma sembra che tu l'abbia già trovato! :) – Eric

4

è anche possibile utilizzare la riflessione in questo modo:

Class c = Class.forName("your.project.package.R"); 
Field f = c.getDeclaredField("drawable"); 
Class d = f.getDeclaringClass(); 
Field f2 = d.getDeclaredField("yourstring"); 
int resId = f2.getInt(null); 
Drawable d = getResources().getDrawable(resId); 

Anche se, la soluzione migliore è quello che MarvinLabs suggerito.

+3

Penso che 'Resources.getIdentifier' sia probabilmente un metodo più semplice di questo. – Tim

+0

È grandioso! Non conoscevo questo metodo. Grazie! –

+0

Sì, ma questa soluzione è più veloce (di oltre il 40%) –