2015-11-24 16 views
0

我在製作Android應用程序。我有一個ImageView和我的代碼的一部分,我需要更改其資源。我有一個String數組,這是將字符串的值發送給方法

String[] names = {"chair","desk"};

我在繪製的文件夾,其名稱是「椅子」和「書桌」 2個圖像。當我使用

image.setImageResource(R.drawable.chair);

它完美的作品。但我需要用它作爲:

image.setImageResource(R.drawable.names[0]); 

但Java不允許我這樣做。我需要將字符串的值發送到該方法。有沒有辦法做到這一點?

+1

http://stackoverflow.com/questions/6783327/setimageresource-from-a-string –

回答

6

我會改變它像

int[] names = {R.drawable.chair,R.drawable.desk}; 

,然後你可以,如果你想使用一個String可以使用getResources().getIdentifier()以檢索繪製的ID與名稱

直接使用

image.setImageResource(names[0]); 

+0

但setImageResource方法得到一個整數。當我嘗試發送字符串值 – berkc

+2

時,它顯示錯誤,這就是爲什麼我從String []更改爲int [] – Blackbelt

+0

R.drawable.chair/desk變量實際上是生成的指向正確資源的整數ID。這對他們來說並不合理。 – npace

2

像這樣使用

String[] names = {"drawable/chair","drawable/desk"}; 

int imageResource = getResources().getIdentifier(names[0], null, getActivity().getPackageName()); 

image.setImageResource(imageResource); 

它很簡單。

+0

這不會考慮基於屏幕分辨率的圖像選擇從相應的可繪製文件夾(有一個解釋如下) – takrishna

+0

其使用像R.drawable.chair一樣,但這是另一種方式來使用Android資源。它的圖像分辨率基於imageview。 –

+0

不,它不是..當你指定drawable路徑爲「/ drawable」時,系統只查找「/ drawable」文件夾,而當你從R.drawable.xx引用時,系統會從合適的文件夾中選擇資源(根據手機的屏幕分辨率,它可能是drawabl-hdpi或drawable-mdpi) – takrishna

0

使用R.drawable.xx確保根據設備屏幕分辨率從正確的文件夾(本身drawable /或drawable-hdpi或drawable-mdpi)中選取正確的圖像。因此,使用R.drawable.xx是推薦的方法作爲針對「getResources()。則getIdentifier(FixedPatch)

由於R.drawable.xx是動態生成的對象,使用開關殼體和引用適當的繪製對象基於即將到來的案例將工作最好。另外,有一個默認情況下可以確保如果在可繪製文件夾中找不到圖像,ImageView仍然呈現,沒有任何問題。

例如,

Switch (Case) 
    Case "myString" : ImageView.setImageResource(R.id.myString);//here R.id.myString is hardcoded object reference 
    Case "myString2" : ImageView.setImageResource(R.id.myString); 
    default : ImageView.setImageResource(R.id.myDefaultImage);