所以现在我正在整理一些代码,我有很多其他/ ifs按钮,并想知道什么是一个好方法来做它并使它更整洁?
所以我有12个按钮,每个按钮播放声音并在点击时改变颜色。我有一个方法,但我想知道是否有一个很好的方法来检测按钮而不是if / else?
public void onClick(View v) {
int id = v.getId();
changeToWhite();
if (id == R.id.a_button) {
currentButton(a, 81);
} else if (id == R.id.aSharp_button) {
currentButton(aSharp, 82);
} else if (id == R.id.b_button) {
currentButton(b, 83);
} else if (id == R.id.c_button) {
currentButton(c, 72);
}
等等...
那么有更好的方法吗?我知道有很多其他/ ifs是坏的所以我想尝试改进它。 谢谢!
答案 0 :(得分:2)
您可以使用" switch-case"代替。
>
public void onClick(View v) {
switch(v.getId())
{
case R.id.a_button:
changeToWhite();
break;
case R.id.aSharp_button:
currentButton(aSharp,82);
break;
.....
default:
break;
}
}
答案 1 :(得分:1)
如何使用案例陈述呢?
public void onClick(View v) {
// Perform action on click
switch(v.getId()) {
case R.id.a_button:
currentButton(a, 81);
break;
case R.id.aSharp_button:
currentButton(aSharp, 82);
break;
/*
and the rest of the cases here.
*/
}
}
答案 2 :(得分:1)
我假设你正在使用XML并设置onClick属性。
更简单/更整洁的方法是使用anonymous inner classes。
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_foo);
findViewById(R.id.view_buttonone).setOnClickListener(new OnClickListener(){
public void onClick(View view){
// button one clicked
}
});
findViewById(R.id.view_buttontwo).setOnClickListener(new OnClickListener(){
public void onClick(View view){
// button two clicked
}
});
}
答案 3 :(得分:1)
首先,使用if / else嵌套有几乎没有惩罚。没有必要尝试这种级别的微管理您的应用程序。你不会从中获益。尝试更多地考虑在可读性方面优化这一点。
现在,要回答您的问题,您可以使用开关/案例构造。
public void onClick(View v) {
switch (item.getItemId()) {
case R.id.aBar_item1:
//Item onClick logic
return true;
case R.id.aBar_item2:
//Item onClick logic
return true;
case R.id.aBar_item3:
//Item onClick logic
return true;
...
}
}