我需要从resource ID
string
String s = "R.raw.button5";
final MediaPlayer mp2 = MediaPlayer.create(this,Integer.valueOf((s));
答案 0 :(得分:1)
您可以使用getIdentifier(....)。如果你有id为“R.id.button5”的按钮,那么这就是你的代码。
int id = getResources().getIdentifier("button5", "id", context.getPackageName());
final MediaPlayer mp2 = MediaPlayer.create(this,id);
答案 1 :(得分:0)
您可以使用getIdentifier()从资源名称获取资源ID:
则getIdentifier
int getIdentifier(String name,
字符串defType,
字符串defPackage)返回给定资源名称的资源标识符。完全 限定资源名称的格式为“package:type / entry”。首先 如果defType和,则两个组件(包和类型)是可选的 defPackage分别在这里指定。
注意:不鼓励使用此功能。效率更高 按标识符而不是按名称检索资源。
要获取资源原始ID,您可以使用以下内容:
Context context = getContext(); // base context or application context
int resId = getResources().getIdentifier("button5", "raw",
context.getPackageName());
// Or
int resId = getResources().getIdentifier("raw/button5", null,
context.getPackageName());
但是您需要记住,正如文档中的说明所示,您最好使用预生成的资源ID而不是从资源名称获取。这是因为getIdentifier()
需要时间来找到匹配的资源名称,如下面的代码所示(来自Resources):
public int getIdentifier(String name, String defType, String defPackage) {
if (name == null) {
throw new NullPointerException("name is null");
}
try {
return Integer.parseInt(name);
} catch (Exception e) {
// Ignore
}
return mAssets.getResourceIdentifier(name, defType, defPackage);
}
另一个原因是,使用R.raw.button5
对资源名称进行硬编码是一项维护噩梦。因为您将来可能会更改名称,所以最终会找到指向无处的资源名称。