2013-02-21 203 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)