仔细研究每个问题,都无法使其发挥作用。
我想用一个字符串的值设置一个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);
由于
答案 0 :(得分:16)
要从字符串组件构造资源ID,您必须将单个组件传递到getIdentifier()
,而不是将完全限定ID作为单个参数传递:
//Get the ID for R.layout.widget_blue
int resID = context.getResources().getIdentifier("widget_blue", "layout", context.getPackageName());
然后只需更改第一个参数名称即可获得不同的布局资源。
答案 1 :(得分:1)
为什么要使用getIdentifier?既然你在那里包含了硬编码的字符串,为什么不只是使用所包含的资源标识符,就像你在第二个例子中所做的那样。这更有效,如getIdentifier()方法的文档中所述:
注意:不鼓励使用此功能。按标识符检索资源比按名称检索资源要高效得多。