2012-12-17 9 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を作成するには、個別のコンポーネントをgetIdentifier()に渡し、完全修飾IDを単一のパラメータとして渡す必要があります。

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

次に、最初のパラメータ名を変更して、別のレイアウトリソースを取得してください。

+0

感謝の男!!出来た – Jakob

1

なぜこのためにgetIdentifierを使用していますか?とにかくそこにハードコードされた文字列を含めるので、2番目の例で行ったように、とにかく含まれているリソース識別子を使用しないでください。

注:この関数の使用はお勧めできません。getIdentifier()メソッドのドキュメントに記載されているように、これはずっと効率的です。名前よりも識別子でリソースを取得する方がはるかに効率的です。

関連する問題