我試圖從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