2012-12-17 26 views
5

Przejrzałem każde pytanie, nie mogę go uruchomić.pobieranie identyfikatora układu z łańcucha znaków, nie będzie działać

Chcę ustawić układ AppWidgets z wartością ciągu znaków (więc układ można zmienić na inny poprzez zmianę ciągu znaków).

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

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

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

nie wiem dlaczego to nie działa, widget prostu mówi: "problem widget loading" ..

to działa prawidłowo:

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

Dzięki

+1

Czy możesz spróbować zrobić notatkę po prostu '" widget_blue "' (więc nie ma '' R.layout. "')? –

Odpowiedz

14

W Aby utworzyć identyfikator zasobu z komponentów ciągów, należy przekazać poszczególne komponenty do getIdentifier(), a nie do pełnego identyfikatora jako pojedynczego parametru:

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

Następnie wystarczy zmienić nazwę pierwszego parametru, aby uzyskać inny zasób układu.

+0

dzięki! zadziałało – Jakob

1

Dlaczego używasz getIdentifier? Ponieważ mimo wszystko dodajesz tam zakodowany ciąg znaków, dlaczego nie wystarczy użyć dołączonego identyfikatora zasobu, tak jak w drugim przykładzie. Jest to o wiele bardziej wydajne, jak podano w dokumentacji metody getIdentifier():

Uwaga: korzystanie z tej funkcji jest odradzane. O wiele wydajniejsze jest pobieranie zasobów za pomocą identyfikatora niż nazwy.

Powiązane problemy