如何在Android中从字符串获取资源ID

3

我需要从字符串中获取一个资源ID

String s = "R.raw.button5";

final MediaPlayer mp2 = MediaPlayer.create(this,Integer.valueOf((s));

4
欢迎来到SO。我们在这里帮助你解决代码问题,如果你还没有尝试过任何东西,那么我们就无法提供太多帮助。请参观SO的tour页面,并阅读help页面了解如何提问。 - Syfer
2个回答

3
您可以使用 getIdentifier(....)。如果您有一个id为“R.id.button5”的按钮,则以下是您的代码。
int id = getResources().getIdentifier("button5", "id", context.getPackageName());
final MediaPlayer mp2 = MediaPlayer.create(this,id);

1
你可以使用getIdentifier()从资源名中获取资源id:

getIdentifier

int getIdentifier (String name,
String defType,
String defPackage)

返回给定资源名称的资源标识符。完全限定的资源名称的格式为“package:type / entry”。如果在此处分别指定defType和defPackage,则第一个和第二个组件(package和type)是可选的。

注意:不建议使用此功能。通过标识符检索资源比通过名称检索资源更有效率。

要获取资源原始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 进行硬编码的资源名称会导致维护困难。因为未来有可能会更改名称,这样你最终会得到一个指向无处的资源名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接