【问题标题】:Android better way to do button clicks?Android更好的方式来做按钮点击?
【发布时间】:2013-03-24 02:31:53
【问题描述】:

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

等等……

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

【问题讨论】:

  • 对于初学者,您可以使用switch 声明。

标签: android button click


【解决方案1】:

您可以改用“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;
}

}

【讨论】:

  • 你可以使用 switch-case 吗?有人告诉我它在Android中不起作用!如果它有效
  • 当击进入太快了。谢谢!
  • @AndyOHart - 如果您的 R.id 是在库项目中生成的(它们不是最终的),则 switch case 将不起作用,但使用您自己的 R.id 在切换语句
【解决方案2】:

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

      }
   }

【讨论】:

  • 你可以使用case语句吗?有人告诉我,你不能在 Android 中做到这一点!如果这行得通,那就太好了:) 非常感谢!
  • 只有当您的项目是库项目时,您才能使用 swicth/case。
  • @Bruno Mateus 这到底是什么意思?
  • 正如@ianhanniballake 之前解释得更好。 “如果您的 R.id 是在库项目中生成的(它们是非最终的),switch case 将不起作用,但使用您自己的 R.id 在 switch 语句中可以正常工作”
【解决方案3】:

我假设您正在使用 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
        }
    });
}

【讨论】:

    【解决方案4】:

    首先,使用 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;
    
            ...
        }  
    }
    

    【讨论】:

    • 我想改变它的唯一原因是因为它是为了上大学,他们说如果他们看到很多 if/else 语句,我们可能会受到很大的惩罚。但是对于这样的东西,它会点击一个按钮,我不确定是否有更好的方法
    猜你喜欢
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    相关资源
    最近更新 更多