使用变量指定R对象

时间:2013-05-13 08:42:33

标签: java android

我对Java很新。所以请原谅我提出这么简单的问题。


要设置视图的背景图像,我可以通过

执行此操作
int TheButton = R.drawable.button1;   
button.setBackgroundResource(TheButton);

但是,如果我想使用变量指定R对象,怎么办呢?

int a = 1;
int TheButton = R.drawable["button"+a]; //this is what I'll do in javascript...  
button.setBackgroundResource(TheButton);

4 个答案:

答案 0 :(得分:1)

试试这个:

         String variable="button" + a;
         int Button = getResources().getIdentifier(variable, "drawable",  getPackageName()); 
         //Whatever you want to do..

答案 1 :(得分:1)

在Android中,您无法以这种方式访问​​资源,因为当Android编译您的应用程序时,它会将所有这些字段转换为常量值(int)。

因此,您需要编写自己的映射器以获得您期望的结果,例如,您可以将所有相关资源放入数组中:

int[] myResourceArray = new int[]{R.drawable.first, R.drawable.second ...};
button.setBackgroundResource(myResourceArray[0]);
...
button.setBackgroundResource(myResourceArray[1]);

或者您可以使用@Sercan建议的方式,但根据Android的文档,他们不鼓励使用它出于性能原因。看看这里:getIdentifier()

答案 2 :(得分:1)

当我们使用R.drawable.button1时,它引用int类中的drawable元素,该元素位于R类中。 R.java是gen文件夹中的自生成类。

所以int TheButton = R.drawable["button"+a];无效。

如果你想从js中分配一个特定的id,那么你可以直接使用从R.java复制的代码,如从{java复制的int TheButton =0x7f080002;

OR

int TheButton = getResources().getDrawable(R.drawable.button1);

答案 3 :(得分:0)

Ok首先,因为在输入java变量时,不能将int添加到字符序列中。

其次,您不能使用字符串从类中调用公共变量(在本例中为自动生成的R类)。

第三点,如果tou想要在Button上使用多个drawable并在它们之间切换,我建议你使用level-list drawable或state-liste drawable。

查看:http://developer.android.com/guide/topics/resources/drawable-resource.html