findViewById函数使用字符串变量

时间:2013-03-19 07:11:27

标签: android

我目前遇到问题,是否可以使用" findViewById()"像这样?

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

4 个答案:

答案 0 :(得分:3)

编辑:您知道,您只能在findViewById类型上致电R.id。因此,您的代码必然会失败,因为您在R.drawable类型上调用它。

试试getIdentifier()Documentation

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

注意:Android文档说:

  

不鼓励使用此功能。它效率更高   按标识符而不是按名称检索资源。

在这种情况下,如果您定义了一个int数组,并且那些包含drawable资源的ID,则可能会更好。

答案 1 :(得分:1)

你不能这样做,但是有一个解决方法。尝试这样的事情: -

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

其中this是一项活动,只是为了澄清。

如果您想要 strings.xml 中的String或UI元素的identifier,请替换“drawable”

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

我必须警告你,这种获取标识符的方式非常慢,只在需要的地方使用。

答案 2 :(得分:0)

findViewById()接受int而不是字符串。所以你可以使用像..

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};

答案 3 :(得分:0)

不能做到这一点

你可以像

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