我试图从strings.xml中做下列得到一个字符串的ID与价值“你好”:则getIdentifier()总是返回0
getContext().getResources().getIdentifier("Hello", "string", getContext().getPackageName());
则返回0。这是为什么呢返回0?
我试图从strings.xml中做下列得到一个字符串的ID与价值“你好”:则getIdentifier()总是返回0
getContext().getResources().getIdentifier("Hello", "string", getContext().getPackageName());
则返回0。这是为什么呢返回0?
因为您传递字符串的值为,而您应该通过资源名称的字符串。
看看方法签名:getIdentifier(String name, String defType, String defPackage)
。
当找不到资源时,0
返回,这与您所遇到的一致。
编辑:
的getIdentifier()
鼓励使用未 - 报价参考:
注:使用此功能被劝阻。通过标识符而不是按名称检索资源要高效得多。
我知道没有直接的方式来获取基于字符串值的字符串的ID。不过,我已经看到了两种解决方法/黑客:您要进行这样执行查找
名称的所有字符串:stringN
其中N
是增加每个字符串的从零开始的例子整数。最后会出现一些丑陋的名字,例如string0
,string1
等。然后你自己做查找 - 你重复N
,创建字符串ID:stringN
,获取它的值并检查匹配。我认为这很丑。
使用Typed Array资源并将所有字符串放在那里。它基本上与方法1相同,但避免了创建令人讨厌的污染资源名称。
如果在清单包名称不同,因为你的包名称不正确,你不会得到一个标识符,以获得正确的资源包名动态,你应该使用:
String rPackageName = mContext.getResources().getResourcePackageName(R.some.wellKnownResource);
“rPackageName”是你要传递给函数
getIdentifier(String name, String defType, String defPackage)
你是对的包名。有没有办法从值中查找ID? – Klaasvaak 2013-02-21 16:40:04
@Klaasvaak我不相信你可以从它的价值中找到资源... – Sam 2013-02-21 16:49:48
@Klaasvaak请参阅编辑。 – andr 2013-02-21 16:51:41