2013-03-19 91 views
2

我目前面臨一個問題,是否可以使用這樣的功能「findViewById()」?findViewById函數使用字符串變量

String[] names{ "a", "b"}; 
findViewById(R.drawable.names[0]); 
+0

沒有,findViewById()接受INT(查看ID)爲參數。 – SKK 2013-03-19 07:13:36

+2

'findViewById'和'R.drawable'?似乎合法.. – 2013-03-19 07:20:10

回答

2

編輯:只要你知道,你只能叫findViewByIdR.id類型。因此,您的代碼必然會失敗,因爲您在R.drawable類型中調用它。

嘗試getIdentifier()Documentation

int resourceId = getResources().getIdentifier(names[0], "drawable", getPackageName()); 
findViewById(resourceId); 

注:Android的文件說:

使用此功能被勸阻。 通過標識符而不是按名稱檢索資源要高效得多。

在這種情況下,它很可能會更好,如果你定義的int數組,那些包含在drawable資源的ID。

1

沒有你不能這樣做,而是有相應的解決方法。嘗試是這樣的: -

String[] names{ "a", "b"}; 
int drawableId = this.getResources().getIdentifier(names[0], "drawable", this.getPackageName()); 
findViewById(drawableId); 

this是一種活動,寫只是爲了澄清。

如果你想有一個String的strings.xml或UI元素的identifier,替代「繪製」

int resourceId = this.getResources().getIdentifier("nameOfResource", "id", this.getPackageName()); 

我必須警告你,獲得標識的這種方式實在是太慢了,只在需要的地方使用。

+0

我不認爲你的答案是錯誤的或不相關的。所以我會中立downvote。 – 2013-03-19 07:19:56

0

findViewById()accept int not string。所以,你可以像使用..

int[] txtViewIdsform1; 
txtViewIdsform1 = new int[] { R.drawable.txt_phone1, R.drawable.txt_phone2, 
       R.drawable.txt_fax, R.drawable.txt_contact_name, R.drawable.txt_contact_ph}; 
0

沒有這個不能做

你可以做其他的方式就像

int[] ids={R.drawable.a,R.drawable.b}; 
findViewById(ids[0]);