Android 小項目之---- 計算器 使用同一個事件监听完成 加减乘除 (附源码)
2010-05-18 22:50 Terry_龙 阅读(4171) 评论(4) 编辑 收藏 举报这个小项目除了要我们活用按钮的组之外,也示范如何利用同一个监听处理不同事件然后与TextView的文字作出相應的變化
廢話不多說:效果圖如下:
看到這個界面可能最直接的處理辦法就是每一個按鈕設置一個監聽事件然後在每一個事件上處理即可,沒錯。這個辦法是可行的
但最后我們看到的代碼是不是很不優雅,有很多重複的操作?所以我們想到了用一個监听来处理不同的事件。那要怎么做呢?跟着我一起来做吧
大概代码如下:声明一个点击的监听事件
private OnClickListener listener;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 listener= new OnClickListener() {
2
3 @Override
4 public void onClick(View v) {
5 // TODO Auto-generated method stub
6 switch (v.getId()) {
7 case R.id.Button01:
8 if(isEmpty(mEditText1,mEditText2)==false)
9 {
10 Confirm().show();
11 return;
12 }
13 mTextView1.setText("+");
14 StrTemp=Float.toString((Float.parseFloat(mEditText1.getText().toString())+
15 (Float.parseFloat(mEditText2.getText().toString()))));
16 mTextView2.setText(StrTemp);
17 break;
18 case R.id.Button02:
19 if(isEmpty(mEditText1,mEditText2)==false)
20 {
21 Confirm().show();
22 return;
23 }
24 mTextView1.setText("-");
25 StrTemp=Float.toString((Float.parseFloat(mEditText1.getText().toString())-
26 (Float.parseFloat(mEditText2.getText().toString()))));
27 mTextView2.setText(StrTemp);
28 break;
29 case R.id.Button03:
30 if(isEmpty(mEditText1,mEditText2)==false)
31 {
32 Confirm().show();
33 return;
34 }
35 mTextView1.setText("*");
36 StrTemp=Float.toString((Float.parseFloat(mEditText1.getText().toString())*
37 (Float.parseFloat(mEditText2.getText().toString()))));
38 mTextView2.setText(StrTemp);
39 break;
40 case R.id.Button04:
41 if(isEmpty(mEditText1,mEditText2)==false)
42 {
43 Confirm().show();
44 return;
45 }
46 mTextView1.setText("/");
47 StrTemp=Float.toString((Float.parseFloat(mEditText1.getText().toString())/
48 (Float.parseFloat(mEditText2.getText().toString()))));
49 mTextView2.setText(StrTemp);
50 break;
51 default:
52 break;
53 }
54 }
55 };
2
3 @Override
4 public void onClick(View v) {
5 // TODO Auto-generated method stub
6 switch (v.getId()) {
7 case R.id.Button01:
8 if(isEmpty(mEditText1,mEditText2)==false)
9 {
10 Confirm().show();
11 return;
12 }
13 mTextView1.setText("+");
14 StrTemp=Float.toString((Float.parseFloat(mEditText1.getText().toString())+
15 (Float.parseFloat(mEditText2.getText().toString()))));
16 mTextView2.setText(StrTemp);
17 break;
18 case R.id.Button02:
19 if(isEmpty(mEditText1,mEditText2)==false)
20 {
21 Confirm().show();
22 return;
23 }
24 mTextView1.setText("-");
25 StrTemp=Float.toString((Float.parseFloat(mEditText1.getText().toString())-
26 (Float.parseFloat(mEditText2.getText().toString()))));
27 mTextView2.setText(StrTemp);
28 break;
29 case R.id.Button03:
30 if(isEmpty(mEditText1,mEditText2)==false)
31 {
32 Confirm().show();
33 return;
34 }
35 mTextView1.setText("*");
36 StrTemp=Float.toString((Float.parseFloat(mEditText1.getText().toString())*
37 (Float.parseFloat(mEditText2.getText().toString()))));
38 mTextView2.setText(StrTemp);
39 break;
40 case R.id.Button04:
41 if(isEmpty(mEditText1,mEditText2)==false)
42 {
43 Confirm().show();
44 return;
45 }
46 mTextView1.setText("/");
47 StrTemp=Float.toString((Float.parseFloat(mEditText1.getText().toString())/
48 (Float.parseFloat(mEditText2.getText().toString()))));
49 mTextView2.setText(StrTemp);
50 break;
51 default:
52 break;
53 }
54 }
55 };
代码简单明了,通过getid()這個方法可以得到相應的按鈕,之后處理。OK 代碼大致上是這樣,之后設置按鈕的單擊事件
mButton1.setOnClickListener(listener);
mButton2.setOnClickListener(listener);
mButton3.setOnClickListener(listener);
mButton4.setOnClickListener(listener);
mButton2.setOnClickListener(listener);
mButton3.setOnClickListener(listener);
mButton4.setOnClickListener(listener);
代碼裏面也順便封裝了彈出提出框代碼如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public AlertDialog Confirm()
2 {
3
4 alert=new AlertDialog.Builder(SimpleCalc.this)
5 .setTitle(R.string.confirm)
6 .setMessage(R.string.content)
7 .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
8
9 @Override
10 public void onClick(DialogInterface dialog, int which) {
11 // TODO Auto-generated method stub
12
13 }
14 })
15 .create();
16
17 return alert;
18 }
2 {
3
4 alert=new AlertDialog.Builder(SimpleCalc.this)
5 .setTitle(R.string.confirm)
6 .setMessage(R.string.content)
7 .setPositiveButton(R.string.OK, new DialogInterface.OnClickListener() {
8
9 @Override
10 public void onClick(DialogInterface dialog, int which) {
11 // TODO Auto-generated method stub
12
13 }
14 })
15 .create();
16
17 return alert;
18 }
檢查文本框是否為空的方法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public boolean isEmpty(EditText e,EditText a)
2 {
3 if(e.getText().toString().length()>0 && a.getText().toString().length()>0)
4 {
5 isbool= true;
6 }
7 else
8 {
9 isbool=false;
10 }
11 return isbool;
12 }
2 {
3 if(e.getText().toString().length()>0 && a.getText().toString().length()>0)
4 {
5 isbool= true;
6 }
7 else
8 {
9 isbool=false;
10 }
11 return isbool;
12 }
到此為止一個簡單的計算器己經完成,下次我們將把按鈕全都放在屏幕 上再利用事件傳递的方法来完成 ,通过点击按钮数字来计算,相信有看到这一篇的朋友知道
应该知道怎么做了。
未完待續。。。。
源碼:點擊下載:/Files/TerryBlog/SimpleCalc.rar
如有不明:QQ 285735942 或Email:terryyhl@gmail.com