我希望switch语句将View作为参数。我知道视图基本上是布局上的小部件。但是当我把观点作为论据时它并不起作用。它在案例绿色时显示错误,因为"需要持续表达"
public void onClick(View v) {
switch(v) {
case green:
CL.setBackgroundColor(Color.parseColor("#00ff00"));
break;
case R.id.button:
CL.setBackgroundColor(Color.BLUE);
break;
}
}
当我将switch(v.getId())作为参数:
时,它工作正常public void onClick(View v) {
switch(v.getId()) {
case R.id.button2:
CL.setBackgroundColor(Color.parseColor("#00ff00"));
break;
case R.id.button:
CL.setBackgroundColor(Color.BLUE);
break;
}
}
有没有办法将视图作为参数?我已在早期代码中分配了视图
Button blue= (Button)findViewById(R.id.button);
Button green=findViewById(R.id.button2);
答案 0 :(得分:0)
switch
中的变量不能是原语,包装,枚举或字符串。
根据Java Language Specification:
Expression的类型必须是char,byte,short,int,Character,Byte,Short,Integer,String或枚举类型(第8.9节),否则会发生编译时错误。
关于你的问题:
是否可以将视图作为参数?
不,不是这样的。但是,您可以为每个应该打开的视图创建Enum
类型。通常,您可以扩展View
类或只是给它一个枚举字段。但是,由于它似乎是一个你无法控制的库对象,我会将视图ID映射到枚举值,如下所示:
switch(v.getId()) {
case Foo.BAR1:
// doStuff
break;
case Foo.BAR2:
// doOtherStuff
break;
default:
}
请注意,在这种情况下以及使用Enum
的所有其他情况下,必须在编译时设置枚举值。