2

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

getContext().getResources().getIdentifier("Hello", "string", getContext().getPackageName());

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

4

2 回答 2

4

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

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

当找不到资源时,0返回与您所经历的一致。

编辑:

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

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

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

    1. 命名您希望对其执行查找的所有字符串,如下所示:例如stringNN对于每个字符串,从 0 开始的整数递增。您最终会得到丑陋的名称,例如string0,string1等。然后您自己进行查找 - 您迭代N,创建字符串 ID: stringN,获取它的值并检查匹配。在我看来,这很丑陋。

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

于 2013-02-21T16:35:51.047 回答
1

如果清单中的包名称不同,您将无法获得标识符,因为您的包名称不正确,为了动态获取资源的正确包名称,您应该使用:

String rPackageName = mContext.getResources().getResourcePackageName(R.some.wellKnownResource);

'rPackageName' 是你应该传递给函数的包名

getIdentifier(String name, String defType, String defPackage)
于 2014-04-30T15:41:54.717 回答