2013-02-21 251 views
2

我试图从strings.xml中做下列得到一个字符串的ID与价值“你好”:则getIdentifier()总是返回0

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

则返回0。这是为什么呢返回0?

回答

4

因为您传递字符串的值为,而您应该通过资源名称的字符串。

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

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

编辑:

  1. getIdentifier()鼓励使用未 - 报价参考:

    注:使用此功能被劝阻。通过标识符而不是按名称检索资源要高效得多。

  2. 我知道没有直接的方式来获取基于字符串值的字符串的ID。不过,我已经看到了两种解决方法/黑客:您要进行这样执行查找

    1. 名称的所有字符串:stringN其中N是增加每个字符串的从零开始的例子整数。最后会出现一些丑陋的名字,例如string0,string1等。然后你自己做查找 - 你重复N,创建字符串ID:stringN,获取它的值并检查匹配。我认为这很丑。

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

+0

你是对的包名。有没有办法从值中查找ID? – Klaasvaak 2013-02-21 16:40:04

+0

@Klaasvaak我不相信你可以从它的价值中找到资源... – Sam 2013-02-21 16:49:48

+1

@Klaasvaak请参阅编辑。 – andr 2013-02-21 16:51:41

1

如果在清单包名称不同,因为你的包名称不正确,你不会得到一个标识符,以获得正确的资源包名动态,你应该使用:

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

“rPackageName”是你要传递给函数

getIdentifier(String name, String defType, String defPackage)