getIdentifier() 始终返回 0

Kla*_*aak 2 android android-resources

我试图从 strings.xml 中获取值为“Hello”的字符串的 ID,执行以下操作:

getContext().getResources().getIdentifier("Hello", "string", getContext().getPackageName());
Run Code Online (Sandbox Code Playgroud)

它返回 0。为什么会返回 0?

and*_*ndr 5

因为您传递的是字符串value,而您应该传递字符串的资源名称。

查看方法签名:getIdentifier(String name, String defType, String defPackage)

当找不到资源时,0会返回与您遇到的情况一致的信息。

编辑:

  1. 不鼓励使用getIdentifier()- 引用参考文献:

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

  2. 我不知道根据相关字符串的值获取字符串 ID 的直接方法。不过我看到了两种解决方法/黑客:

    1. 命名您想要执行查找的所有字符串,如下所示:stringN例如N,其中 是每个字符串递增的从 0 开始的整数。您最终会得到丑陋的名称,例如string0string1等。然后您自己进行查找 - 迭代N,创建字符串 ID: stringN,获取其值并检查是否匹配。我认为这很丑陋。

    2. 使用类型化数组资源并将所有字符串放在那里。它与方法 1 基本相同,但避免创建令人讨厌的、污染性的资源名称。