getIdentifier()始终返回0

时间:2013-02-21 16:31:14

标签: android android-resources

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

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

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

2 个答案:

答案 0 :(得分:4)

因为您传递了字符串 value ,所以您应该传递字符串的资源名称

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

如果找不到资源,则会返回0,这与您遇到的情况一致。

修改

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

      

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

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

    1. 将要执行查找的所有字符串命名为:stringN其中N是例如每个字符串递增的基于0的整数。你最终会得到像string0string1等丑陋的名字。然后你自己进行查找 - 你迭代N,创建字符串ID:stringN,得到它的价值并检查匹配。我认为这很难看。

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

答案 1 :(得分:1)

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

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

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

getIdentifier(String name, String defType, String defPackage)