我需要从字符串中获取一个资源ID
String s = "R.raw.button5";
final MediaPlayer mp2 = MediaPlayer.create(this,Integer.valueOf((s));
我需要从字符串中获取一个资源ID
String s = "R.raw.button5";
final MediaPlayer mp2 = MediaPlayer.create(this,Integer.valueOf((s));
int id = getResources().getIdentifier("button5", "id", context.getPackageName());
final MediaPlayer mp2 = MediaPlayer.create(this,id);
要获取资源原始ID,您可以使用以下内容:getIdentifier
int getIdentifier (String name,
String defType,
String defPackage)返回给定资源名称的资源标识符。完全限定的资源名称的格式为“package:type / entry”。如果在此处分别指定defType和defPackage,则第一个和第二个组件(package和type)是可选的。
注意:不建议使用此功能。通过标识符检索资源比通过名称检索资源更有效率。
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
进行硬编码的资源名称会导致维护困难。因为未来有可能会更改名称,这样你最终会得到一个指向无处的资源名称。