2013-03-24 14 views
0

所以现在我正在整理一些代码,并且我还有很多其他/ ifs按钮,并想知道什么是一种很好的方法来做到这一点,并使其更整洁?Android更好的方法来做按钮点击?

所以我喜欢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

对于初学者,您可以使用'switch'语句。 – 323go 2013-03-24 02:39:51

回答

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

}

+0

你可以使用开关盒吗?有人告诉我,它不适用于Android!如果它起作用 – AndyOHart 2013-03-24 02:53:06

+0

Dang命中太快。谢谢! – AndyOHart 2013-03-24 03:03:24

+1

@AndyOHart - 如果您的R.id是在一个库项目中生成的(它们不是最终的),则切换案例将不起作用,但使用您自己的R.id将在switch语句中正常工作 – ianhanniballake 2013-03-24 03:04:43

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

     } 
    } 
+0

您可以使用大小写声明?我被告知你不能在Android上做它们!如果那个作品很棒:)谢谢你! – AndyOHart 2013-03-24 02:53:56

+2

只有当您的项目是库项目时,才能使用swicth/case。 – 2013-03-24 03:33:23

+0

@布鲁诺马特乌什么意思到底是什么意思? – AndyOHart 2013-03-24 11:21:09

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

     ... 
    } 
} 
+0

我想要的唯一原因改变这是因为它是为了大学,他们说如果他们看到很多if/else的陈述,我们可能会受到很大的惩罚。但对于像这样的东西,它会点击按钮,我不确定是否有更好的方法 – AndyOHart 2013-03-24 11:22:08

相关问题