大家好:
刚刚开始学习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();