简单写了一个Android计算器,事件处理代码一团糟,该如何优化?

大家好:
刚刚开始学习Android开发,写了一个简单的计算器,主要是为了熟悉界面布局和事件处理。我写的代码很蠢,在一个主Activity中,一个按钮添加一个事件,请问有什么好的模式可以优化一下这种代码,谢谢!
[code="java"]package com.wondershare.calculator;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class Calculator extends Activity {

private String number1 = null;
private String number2 = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final EditText editText = (EditText) findViewById(R.id.editText);
    Button del = (Button) findViewById(R.id.del);
    del.setOnClickListener(new OnClickListener() {

//有问题
@Override
public void onClick(View v) {
// Editable str = editText.getText();
// if(!str.equals("")){
// int length = str.length();
// str.delete(length-1, length);
// editText.setText(str);
// }
editText.getText().clear();
}
});
final Button digit0 = (Button) findViewById(R.id.digit0);
digit0.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            String str = (String) digit0.getText();
            if (str.equals("")) {
            } else {
                editText.append(digit0.getText());
            }

        }
    });
    final Button digit1 = (Button) findViewById(R.id.digit1);
    digit1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText.append(digit1.getText());

        }
    });
    final Button digit2 = (Button) findViewById(R.id.digit2);
    digit2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText.append(digit2.getText());

        }
    });
    final Button digit3 = (Button) findViewById(R.id.digit3);
    digit3.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText.append(digit3.getText());

        }
    });
    final Button digit4 = (Button) findViewById(R.id.digit4);
    digit4.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText.append(digit4.getText());

        }
    });
    final Button digit5 = (Button) findViewById(R.id.digit5);
    digit5.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText.append(digit5.getText());

        }
    });
    final Button digit6 = (Button) findViewById(R.id.digit6);
    digit6.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText.append(digit6.getText());

        }
    });
    final Button digit7 = (Button) findViewById(R.id.digit7);
    digit7.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText.append(digit7.getText());

        }
    });
    final Button digit8 = (Button) findViewById(R.id.digit8);
    digit8.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText.append(digit8.getText());

        }
    });
    final Button digit9 = (Button) findViewById(R.id.digit9);
    digit9.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText.append(digit9.getText());

        }
    });
    final Button div = (Button) findViewById(R.id.div);
    div.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            number1 = editText.getText().toString();
            editText.append(div.getText());

        }
    });
    final Button dot = (Button) findViewById(R.id.dot);
    dot.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            editText.append(dot.getText());

        }
    });
    final Button equal = (Button) findViewById(R.id.equal);
    equal.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            String str = editText.getText().toString();//文本
            number2 = str.substring(number1.length()+1, str.length());
            String operation = str.substring(number1.length(), number1.length()+1);
            float result = 0;
            if(operation.equals("+")){
                result = Float.parseFloat(number1)+Float.parseFloat(number2);
            }else if(operation.equals("-")){
                result = Float.parseFloat(number1)-Float.parseFloat(number2);
            }else if(operation.equals("×")){
                result = Float.parseFloat(number1)*Float.parseFloat(number2);
            }else if(operation.equals("/")){
                result = Float.parseFloat(number1)/Float.parseFloat(number2);
            }
            editText.setText(String.valueOf(result));
        }
    });
    final Button minus = (Button) findViewById(R.id.minus);
    minus.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            number1 = editText.getText().toString();
            editText.append(minus.getText());

        }
    });
    final Button mul = (Button) findViewById(R.id.mul);
    mul.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            number1 = editText.getText().toString();
            editText.append(mul.getText());

        }
    });
    final Button plus = (Button) findViewById(R.id.plus);
    plus.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //保存第一个操作数
            number1 = editText.getText().toString();
            editText.append(plus.getText());

        }
    });
}

}[/code]

[code="java"]
public void onClick(View v) {
// TODO Auto-generated method stub
int id = v.getId();
switch(id){
default:
break;
case R.id.digit0:
case R.id.digit1:
case R.id.digit2:
case R.id.digit3:
case R.id.digit4:
case R.id.digit5:
case R.id.digit6:
case R.id.digit7:
case R.id.digit8:
Button digit = (Button)findViewById(id);
Toast.makeText(Calculator.this,digit.getText(), Toast.LENGTH_SHORT).show();
break;
// ....
}
}
[/code]

就是这个意思

给个我的习惯。
[code="java"]
public class Calculator extends Activity implements OnClickListener {

private String number1 = null;
private String number2 = null;

Button digit0;
Button digit1;
Button digit2;
Button digit3; 
Button digit4;
Button digit5;
Button digit6;
Button digit7;
Button digit8;
Button digit9;
Button delete;
EditText editText;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //initUI
    digit0      = (Button)  findViewById(R.id.digit0);
    digit1      = (Button)  findViewById(R.id.digit1);
    digit2      = (Button)  findViewById(R.id.digit2);
    digit3      = (Button)  findViewById(R.id.digit3);
    digit4      = (Button)  findViewById(R.id.digit4);
    digit5      = (Button)  findViewById(R.id.digit5);
    digit6      = (Button)  findViewById(R.id.digit6);
    digit7      = (Button)  findViewById(R.id.digit7);
    digit8      = (Button)  findViewById(R.id.digit8);
    digit9      = (Button)  findViewById(R.id.digit9);
    editText    = (EditText)findViewById(R.id.editText);
    del         = (Button)  findViewById(R.id.del);

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId()){
        default:
            break;
        case R.id.plus:
            break;;
        case R.id.digit0:
            break;
        case R.id.digit1:
            break;
        case R.id.digit2:
            break;
        case R.id.digit3:
            break;
        case R.id.digit4:
            break;
        case R.id.digit5:
            break;
        case R.id.digit6:
            break;
        case R.id.digit7:
            break;
        case R.id.digit8:
            break;
        case R.id.digit9:
            break;
        ....
    }
}

}
[/code]

不好意思还有点没有加上

    [code="java"]        
    digit0.setOnClickListener(this);
    digit1.setOnClickListener(this);
    digit2.setOnClickListener(this);
    digit3.setOnClickListener(this);
    digit4.setOnClickListener(this);
    digit5.setOnClickListener(this);
    digit6.setOnClickListener(this);
    digit7.setOnClickListener(this);
    digit8.setOnClickListener(this);

[/code]
你可以把他们放在一个方法里面
还有,那个setText你觉得有重复,那要你的代码控制啊。
有一些可以用
setTextValue(String.valueOf(view.getId()));
当然你也可以在switch之前用一个变量保存view.getId().
这样就不必重复的getId();