使用变量,重复代码切换案例

时间:2014-11-11 00:48:28

标签: android button switch-statement

我有50 Buttons。我使用switch语句,如下所示。每个case都有相同的On-Click代码。但是我对每个Button的代码进行了很多更改,这是非常繁琐的工作,并且以相同的方式更改代码非常重复50次。我的代码目前看起来像这样:

 public void ButtonOnClick(View v) {

     switch (v.getId()) {
        case button1:
            if(button_list.get(1).getTag().equals("0"))
                enter_txt.setText(enter_txt.getText()+button_list.get(1).getText().toString());
            is_clicked= (String)button_list.get(1).getTag();      
            if ("0".equals(is_clicked)){
                button_list.get(1).setBackgroundResource(R.drawable.button_pressed);
                button_list.get(1).setTag("1"); 
            }else{
                    button_list.get(1).setBackgroundResource(R.drawable.button_normal);
                    button_list.get(1).setTag("0"); 
            }
            break;
        case button2:
            if(button_list.get(2).getTag().equals("0"))
                enter_txt.setText(enter_txt.getText()+button_list.get(2).getText().toString());
            is_clicked= (String)button_list.get(2).getTag();      
            if ("0".equals(is_clicked)){
                button_list.get(2).setBackgroundResource(R.drawable.button_pressed);
                button_list.get(2).setTag("1"); 
            }else{
                    button_list.get(2).setBackgroundResource(R.drawable.button_normal);
                    button_list.get(2).setTag("0"); 
            }
            break;
        case button3:
            if(button_list.get(3).getTag().equals("0"))
                enter_txt.setText(enter_txt.getText()+button_list.get(3).getText().toString());
            is_clicked= (String)button_list.get(3).getTag();      
            if ("0".equals(is_clicked)){
                button_list.get(3).setBackgroundResource(R.drawable.button_pressed);
                button_list.get(3).setTag("1"); 
            }else{
                    button_list.get(3).setBackgroundResource(R.drawable.button_normal);
                    button_list.get(3).setTag("0"); 
            }
            break;
        case button4:
            if(button_list.get(4).getTag().equals("0"))
                enter_txt.setText(enter_txt.getText()+button_list.get(4).getText().toString());
            is_clicked= (String)button_list.get(4).getTag();      
            if ("0".equals(is_clicked)){
                button_list.get(4).setBackgroundResource(R.drawable.button_pressed);
                button_list.get(4).setTag("1"); 
            }else{
                    button_list.get(4).setBackgroundResource(R.drawable.button_normal);
                    button_list.get(4).setTag("0"); 
            }
            break;
        case button5:
            if(button_list.get(5).getTag().equals("0"))
                enter_txt.setText(enter_txt.getText()+button_list.get(5).getText().toString());
            is_clicked= (String)button_list.get(5).getTag();      
            if ("0".equals(is_clicked)){
                button_list.get(5).setBackgroundResource(R.drawable.button_pressed);
                button_list.get(5).setTag("1"); 
            }else{
                    button_list.get(5).setBackgroundResource(R.drawable.button_normal);
                    button_list.get(5).setTag("0"); 
            }
            break;
        case button6:
            if(button_list.get(6).getTag().equals("0"))
                enter_txt.setText(enter_txt.getText()+button_list.get(6).getText().toString());
            is_clicked= (String)button_list.get(6).getTag();      
            if ("0".equals(is_clicked)){
                button_list.get(6).setBackgroundResource(R.drawable.button_pressed);
                button_list.get(6).setTag("1"); 
            }else{
                    button_list.get(6).setBackgroundResource(R.drawable.button_normal);
                    button_list.get(6).setTag("0"); 
            }
            break;
        case button7:
            if(button_list.get(7).getTag().equals("0"))
                enter_txt.setText(enter_txt.getText()+button_list.get(7).getText().toString());
            is_clicked= (String)button_list.get(7).getTag();      
            if ("0".equals(is_clicked)){
                button_list.get(7).setBackgroundResource(R.drawable.button_pressed);
                button_list.get(7).setTag("1"); 
            }else{
                    button_list.get(7).setBackgroundResource(R.drawable.button_normal);
                    button_list.get(7).setTag("0"); 
            }
            break;
        case button8:
            if(button_list.get(8).getTag().equals("0"))
                enter_txt.setText(enter_txt.getText()+button_list.get(8).getText().toString());
            is_clicked= (String)button_list.get(8).getTag();      
            if ("0".equals(is_clicked)){
                button_list.get(8).setBackgroundResource(R.drawable.button_pressed);
                button_list.get(8).setTag("1"); 
            }else{
                    button_list.get(8).setBackgroundResource(R.drawable.button_normal);
                    button_list.get(8).setTag("0"); 
            }
            break;
        case button9:
            if(button_list.get(9).getTag().equals("0"))
                enter_txt.setText(enter_txt.getText()+button_list.get(9).getText().toString());
            is_clicked= (String)button_list.get(9).getTag();      
            if ("0".equals(is_clicked)){
                button_list.get(9).setBackgroundResource(R.drawable.button_pressed);
                button_list.get(9).setTag("1"); 
            }else{
                    button_list.get(9).setBackgroundResource(R.drawable.button_normal);
                    button_list.get(9).setTag("0"); 
            }
            break;
            case button10:
                if(button_list.get(10).getTag().equals("0"))
                    enter_txt.setText(enter_txt.getText()+button_list.get(10).getText().toString());
                is_clicked= (String)button_list.get(10).getTag();     
                if ("0".equals(is_clicked)){
                    button_list.get(10).setBackgroundResource(R.drawable.button_pressed);
                    button_list.get(10).setTag("1");    
                }else{
                        button_list.get(10).setBackgroundResource(R.drawable.button_normal);
                        button_list.get(10).setTag("0");    
                }
                break;

有没有办法可以使用常规变量来访问每个case,所以如果我做了更改,我不需要为每个按钮做50次?我想做这样的事情:

public void ButtonOnClick(View v) {

    switch (v.getId()) {
        case button[i] 
            if(button_list.get(i).getTag().equals("0"))
                enter_txt.setText(enter_txt.getText()+button_list.get(i).getText().toString());
            is_clicked= (String)button_list.get(i).getTag();      
            if ("0".equals(is_clicked)){
                button_list.get(i).setBackgroundResource(R.drawable.button_pressed);
                button_list.get(i).setTag("1"); 
            }else{
                    button_list.get(i).setBackgroundResource(R.drawable.button_normal);
                    button_list.get(i).setTag("0"); 
            }
            break;

这会有用吗?或者我需要做些什么,所以每次我决定要更改OnClick方法时,我都不需要对代码进行50次更改?

2 个答案:

答案 0 :(得分:2)

我将假设ButtonOnClick是按钮的点击处理程序。我进一步假设对于任何ibutton_list.get(i)的内容都是按钮。如果那是对的,则参数v与列表中存储的Button对象相同。然后,您可以将整个处理程序减少到:

public void ButtonOnClick(View v) {
    Button btn = (Button) v;
    if (btn.getTag().equals("0")) {
        enter_txt.setText(enter_txt.getText()+btn.getText().toString());
    }
    is_clicked= (String) btn.getTag();
    if ("0".equals(is_clicked)){
        btn.setBackgroundResource(R.drawable.button_pressed);
        btn.setTag("1"); 
    }else{
        btn.setBackgroundResource(R.drawable.button_normal);
        btn.setTag("0"); 
    }
}

另外,您可以考虑使用Boolean个对象而不是String个对象作为按钮标记。

答案 1 :(得分:1)

首先,你应该永远不要复制粘贴代码,尝试在另一种方法中提取你的代码。

如果您使用存储所有按钮的arraylist,则可以使用ArrayList.indexOf(Object o) 因此,只需将ButtonOnClick方法替换为此方法,您将来也可以轻松处理其他按钮行为:

public void ButtonOnClick(View v) {
    if(button_list.contains(v))
    {
            setButtonBackground(button_list.indexOf(v));
    }
}

private setButtonBackground(int buttonNumber)
{
    Button myButton = (Button) button_list.get(buttonNumber);

    if(myButton.getTag().equals("0"))
    {
        enter_txt.setText(enter_txt.getText()+myButton.getText().toString());
    }

    is_clicked = (String) myButton.getTag();   

    if ("0".equals(is_clicked))
    {
        myButton.setBackgroundResource(R.drawable.button_pressed);
        myButton.setTag("1"); 
    }
    else
    {
        myButton.setBackgroundResource(R.drawable.button_normal);
        myButton.setTag("0"); 
    }
}

当您开发而不是复制和粘贴代码时,只需使用快捷方式提取到方法,这样您就可以得到类似的东西并节省时间。

[...]
case button1:
        setButtonBackground(1);
        break;
case button2:
        setButtonBackground(2);
        break;
[...]

让我知道它是否适合你