2012-12-17 28 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); 

不知道爲什麼它不工作,只是小工具說: 「問題加載插件」 ..

這工作得很好:

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

感謝

+1

你可以嘗試使noteString只是'「widget_blue」'(所以不是'「R.layout。」')? –

回答

14

在爲了從字符串組件構建資源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?既然你在那裏包含硬編碼的字符串,爲什麼不直接使用包含的資源標識符呢,就像你在第二個例子中所做的那樣。正如getIdentifier()方法的文檔中所述,效率更高:

注意:不鼓勵使用此函數。通過標識符而不是按名稱檢索資源要高效得多。