android觀察者模式三種實現方法

本文介绍了一个简单的BMI计算器应用程序,该应用通过观察者模式实现了对用户输入的响应,并根据输入的身高和体重计算BMI值,进而判断体型状况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

demo: EditText計算身高體重,使用觀察者模式實現

1.內部類實現

package com.zhg.day0102; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import android.widget.LinearLayout.LayoutParams; public class Day01_02Activity extends Activity { private TextView tvHeight, tvWeight; private EditText etHeight, etWeight; private Button btnCalc, btnCancle; private LinearLayout root, row1, row2, row3; /**內部類重寫OnClickListener方法 * 创建一个监听器类,实现OnClickListener接口 * * @author Administrator * */ private class ButtonClickListener implements OnClickListener { /** * 单击事件的处理方法 * */ public void onClick(View v) { // TODO Auto-generated method stub String text = ((Button) v).getText().toString(); if ("计算".equals(text)) { double height = 0; double weight = 0; //获取身高 if(etHeight.getText()!=null && !"".equals(etHeight.getText().toString().trim())){ height = Double.parseDouble(etHeight.getText().toString()); } //获取体重 if(etWeight.getText()!=null && !"".equals(etWeight.getText().toString().trim())){ weight = Double.parseDouble(etWeight.getText().toString()); } Log.i("info", "height=" + height); Log.i("info", "weight=" + weight); //计算bmi值 double bmi = weight/(height*height/10000); Log.i("info", "bmi=" + bmi); //根据bmi值 输入身材提示 if(bmi<18){ Toast.makeText(Day01_02Activity.this, "偏瘦", 3000).show(); }else if(bmi<=25){ Toast.makeText(Day01_02Activity.this, "标准", 3000).show(); }else if(bmi<=30){ Toast.makeText(Day01_02Activity.this, "偏胖", 3000).show(); } }else{//单击btnCancel //清空文本框 etHeight.setText(""); etWeight.setText(""); } } } private void setupView() { tvHeight = new TextView(this); tvHeight.setText("身高"); etHeight = new EditText(this); LayoutParams p1 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f); // etHeight.setLayoutParams(p1); row1 = new LinearLayout(this); row1.addView(tvHeight); row1.addView(etHeight, p1); tvWeight = new TextView(this); tvWeight.setText("体重"); etWeight = new EditText(this); etWeight.setLayoutParams(p1); row2 = new LinearLayout(this); row2.addView(tvWeight); row2.addView(etWeight); btnCalc = new Button(this); btnCalc.setText("计算"); btnCancle = new Button(this); btnCancle.setText("取消"); row3 = new LinearLayout(this); row3.addView(btnCalc, p1); row3.addView(btnCancle, p1); root = new LinearLayout(this); root.setOrientation(LinearLayout.VERTICAL); root.addView(row1); root.addView(row2); root.addView(row3); setContentView(root); } private void addListener() { // 创建监听器对象 ButtonClickListener listener = new ButtonClickListener(); // 注册监听对象到要监听的事件源 btnCalc.setOnClickListener(listener); btnCancle.setOnClickListener(listener); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.main); setupView(); addListener(); } }


2.匿名類實現


package com.tarena.day0104; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import android.widget.LinearLayout.LayoutParams; public class Day01_04Activity extends Activity { private TextView tvHeight, tvWeight; private EditText etHeight, etWeight; private Button btnCalc, btnCancle; private LinearLayout root, row1, row2, row3; //創建介面 private void setupView() { tvHeight = new TextView(this); tvHeight.setText("身高"); etHeight = new EditText(this); LayoutParams p1 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f); // etHeight.setLayoutParams(p1); row1 = new LinearLayout(this); row1.addView(tvHeight); row1.addView(etHeight, p1); tvWeight = new TextView(this); tvWeight.setText("体重"); etWeight = new EditText(this); etWeight.setLayoutParams(p1); row2 = new LinearLayout(this); row2.addView(tvWeight); row2.addView(etWeight); btnCalc = new Button(this); btnCalc.setText("计算"); btnCancle = new Button(this); btnCancle.setText("取消"); row3 = new LinearLayout(this); row3.addView(btnCalc, p1); row3.addView(btnCancle, p1); root = new LinearLayout(this); root.setOrientation(LinearLayout.VERTICAL); root.addView(row1); root.addView(row2); root.addView(row3); setContentView(root); } //創建監聽方法 private void addListener() { // 注册监听对象到要监听的事件源,匿名類實現,只調用一次 btnCalc.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(Day01_04Activity.this, "btnCalc被单击", 3000).show(); } }); btnCancle.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(Day01_04Activity.this, "btnCancel被单击", 3000).show(); } }); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //調用創建介面方法 setupView(); //調用監聽方法 addListener(); } }


3.直接實現

package com.zhg.day0103; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import android.widget.LinearLayout.LayoutParams; public class Day01_03Activity extends Activity implements OnClickListener{ private TextView tvHeight, tvWeight; private EditText etHeight, etWeight; private Button btnCalc, btnCancle; private LinearLayout root, row1, row2, row3; public void onClick(View v) { //取得文本框的值 String text = ((Button) v).getText().toString(); //觸發點擊事件 if ("计算".equals(text)) { Toast.makeText(Day01_03Activity.this, "btnCalc按钮被单击", 3000) .show(); }else{ Toast.makeText(Day01_03Activity.this, "btnCancel按钮被单击", 3000) .show(); } } private void setupView() { tvHeight = new TextView(this); tvHeight.setText("身高"); etHeight = new EditText(this); LayoutParams p1 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1.0f); // etHeight.setLayoutParams(p1); row1 = new LinearLayout(this); row1.addView(tvHeight); row1.addView(etHeight, p1); tvWeight = new TextView(this); tvWeight.setText("体重"); etWeight = new EditText(this); etWeight.setLayoutParams(p1); row2 = new LinearLayout(this); row2.addView(tvWeight); row2.addView(etWeight); btnCalc = new Button(this); btnCalc.setText("计算"); btnCancle = new Button(this); btnCancle.setText("取消"); row3 = new LinearLayout(this); row3.addView(btnCalc, p1); row3.addView(btnCancle, p1); root = new LinearLayout(this); root.setOrientation(LinearLayout.VERTICAL); root.addView(row1); root.addView(row2); root.addView(row3); setContentView(root); } private void addListener() { // 注册监听对象到要监听的事件源 btnCalc.setOnClickListener(this); btnCancle.setOnClickListener(this); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.main); setupView(); addListener(); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值