0

所以现在我正在整理一些代码,并且我有很多按钮的 else/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);
    }

ETC...

那么有没有更好的方法呢?我知道有很多 else/if 是不好的,所以我想尝试改进它。谢谢!!

4

4 回答 4

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

}

于 2013-03-24T02:39:57.943 回答
1

改用 case 语句怎么样?

    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.
        */

      }
   }
于 2013-03-24T02:40:44.800 回答
1

我假设您正在使用 XML 并设置 onClick 属性。

一种更简单/更整洁的方法是使用匿名内部类

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
        }
    });
}
于 2013-03-24T02:42:06.107 回答
1

首先,使用 if/else 嵌套几乎没有任何损失。无需尝试对您的应用进行这种级别的微观管理。你不会从中获得任何好处。尝试更多地考虑在可读性方面优化这一点。

现在,要回答您的问题,您可以改用 switch/case 构造。

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;

        ...
    }  
}
于 2013-03-24T02:55:13.703 回答