2011-01-18 8 views
24

Nel codice Java di un progetto Android se si desidera che il riferimento per una risorsa vista si può fare qualcosa di simile:Android e ottenere una vista con getto id come una stringa

View addButton = findViewById(R.id.button_0); 

In precedenza R.id .button_0 non è una stringa. È possibile fare riferimento dinamicamente a una risorsa tramite una stringa, ad esempio "R.id.button_0"?

Vorrei fare riferimento a un pulsante di "R.id.button_%i" dove %i è sostituito da qualche indice valido.

risposta

52
int resID = getResources().getIdentifier("button_%i", 
    "id", getPackageName()); 
View addButton = findViewById(resID); 

dove %i è sostituito da un indice valido.

Il metodo getResources() appartiene alla classe Context, in modo da poter utilizzare tale direttamente da un Activity. Se non ci si trova all'interno di un'attività, utilizzare un contesto per accedere: (myCtxt.getResources()).

+0

@Christian: Grazie. Perfezionare. – SK9

+3

Nota che questo sarà molto più lento dell'utilizzo diretto dell'ID. – hackbod

+0

Grazie, proprio quello che stavo cercando. A proposito, ho corretto un errore di compilazione in questo esempio di codice. –

4

Si potrebbe provare a inserire tutti gli ID che si desidera in un array e quindi utilizzare tale array per fare riferimento dinamicamente alle risorse.

+0

Questo potrebbe essere un buon approccio per alcune occasioni speciali (quando il nome delle risorse cambia o l'ordine è complesso); altrimenti penso che non sia il modo migliore per farlo. Alcune volte si finirà con un enorme array che rende il vostro codice un aspetto puzzolente. – Cristian

+0

@cristian fa davvero un codice orribile. Dove l'ho fatto in passato l'ho spinto nella sua stessa classe statica. Ma il tuo approccio sembra un po 'più bello;) – jsonfry

+1

imho in entrambi i modi l'odore. :) – Qberticus

Problemi correlati