xiaowu40 2011-03-30 11:42
浏览 340
已采纳

简单写了一个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]

  • 写回答

3条回答 默认 最新

  • springof 2011-03-31 09:21
    关注

    [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]

    就是这个意思

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能