2012-12-17 8 views
5

Guardato attraverso ogni domanda, non può farlo funzionare.ottenere l'id del layout dalla stringa, non funzionerà

Voglio impostare un layout AppWidgets con il valore di una stringa (in modo che il layout possa essere modificato in un altro semplicemente cambiando la stringa).

String NoteString = "R.layout.widget_blue".toString(); 

int resID = context.getResources().getIdentifier(NoteString, "layout", context.getPackageName()); 

RemoteViews views = new RemoteViews(context.getPackageName(), resID); 

non so perché non funziona widget di, dice solo: "widget di problema loading" ..

Questo funziona bene:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_blue); 

Grazie

+1

Puoi provare a fare noteString solo "widget_blue" (quindi no '" R.layout. "')? –

risposta

14

In Per costruire un ID risorsa da componenti stringa, è necessario passare i singoli componenti in getIdentifier(), non l'ID completo come parametro singolo:

//Get the ID for R.layout.widget_blue 
int resID = context.getResources().getIdentifier("widget_blue", "layout", context.getPackageName()); 

Quindi modificare il nome del primo parametro per ottenere una risorsa di layout diversa.

+0

grazie amico !! ha funzionato – Jakob

1

Perché stai utilizzando getIdentifier per questo? Dato che stai includendo la stringa hard-coded in ogni caso, perché non usare solo l'identificatore di risorsa incluso in ogni caso, come hai fatto nel secondo esempio. Questo è molto più efficiente, come indicato nella documentazione sul metodo getIdentifier():

Nota: l'uso di questa funzione è scoraggiato. È molto più efficiente recuperare le risorse per identificatore che per nome.

Problemi correlati