从字符串获取布局ID,将无法正常工作

时间:2012-12-17 21:45:50

标签: android string widget

仔细研究每个问题,都无法使其发挥作用。

我想用一个字符串的值设置一个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);

由于

2 个答案:

答案 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()方法的文档中所述:

  

注意:不鼓励使用此功能。按标识符检索资源比按名称检索资源要高效得多。