Android 小項目之---- 計算器 使用同一個事件监听完成 加减乘除 (附源码)
2010-05-18 22:50 Terry_龙 阅读(4176) 评论(4) 编辑 收藏 举报这个小项目除了要我们活用按钮的组之外,也示范如何利用同一个监听处理不同事件然后与TextView的文字作出相應的變化
廢話不多說:效果圖如下:
看到這個界面可能最直接的處理辦法就是每一個按鈕設置一個監聽事件然後在每一個事件上處理即可,沒錯。這個辦法是可行的
但最后我們看到的代碼是不是很不優雅,有很多重複的操作?所以我們想到了用一個监听来处理不同的事件。那要怎么做呢?跟着我一起来做吧
大概代码如下:声明一个点击的监听事件
private OnClickListener listener;

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);
代碼裏面也順便封裝了彈出提出框代碼如下:

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 }
檢查文本框是否為空的方法

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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架