2012-12-17 4 views
5

모든 질문을 살펴본 결과 작동하지 않습니다.문자열에서 레이아웃 ID를 가져 오는 것이 작동하지 않습니다.

문자열 값을 사용하여 AppWidgets 레이아웃을 설정하고 싶습니다. (따라서 문자열을 변경하여 레이아웃을 다른 것으로 전환 할 수 있습니다).

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

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

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

작동하지 않는 이유를 모른다는 위젯은 말한다 :

+1

noteString을 단지 "widget_blue"'(그래서 "R.layout.")로 만들 수 있습니까? –

답변

14

에서

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

감사합니다 : 이것은 잘 작동

"문제 로딩 위젯을".. 문자열 구성 요소에서 리소스 ID를 구성하려면 단일 구성 매개 변수로 정규화 된 ID가 아닌 getIdentifier()에 개별 구성 요소를 전달해야합니다.

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

그런 다음 첫 번째 매개 변수 이름을 변경하여 다른 레이아웃 리소스를 가져옵니다.

+0

감사합니다 !! 효과가있다. – Jakob

1

왜이 용도로 getIdentifier를 사용하고 있습니까? 어쨌든 하드 코딩 된 문자열을 포함하기 때문에 두 번째 예제에서와 같이 어쨌든 포함 된 리소스 식별자를 사용하지 않는 것이 좋습니다. 이는 getIdentifier() 메소드의 문서에 설명 된대로 훨씬 더 효율적입니다.

참고 :이 함수의 사용은 권장하지 않습니다. 이름보다는 식별자로 자원을 검색하는 것이 훨씬 더 효율적입니다.

관련 문제