一、重构程序

  • 重构BMI应用程序

  我们将 “MVC模式” 应用在 “MainActivity.java” 程序上,把 声明与查找界面组件 和 为特定界面组件添加控制流程 的两段代码,分别整理成两个函数 findViews() 和 setListensers()

MainActivity.java

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
package com.example.myapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.text.DecimalFormat;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViews();
        setListensers();
    }

    private Button button_calc;
    private EditText field_height;
    private EditText field_weight;
    private TextView view_result;
    private TextView view_suggest;

    private void findViews() {
        button_calc = (Button) findViewById(R.id.submit);
        field_height = (EditText) findViewById(R.id.height);
        field_weight = (EditText) findViewById(R.id.weight);
        view_result = (TextView) findViewById(R.id.result);
        view_suggest = (TextView) findViewById(R.id.suggest);
    }
    //Listen for button clicks
    private void setListensers() {
        button_calc.setOnClickListener(calcBMI);
    }
   //改成“Button.OnClickListener”是为了让“Button”界面组件和“OnClickListener”界面组件方法之间的关系清晰 private Button.OnClickListener calcBMI = new Button.OnClickListener() {
      public void onClick(View v) {
          DecimalFormat nf = new DecimalFormat("0.00");
          double height = Double.parseDouble(field_height.getText().toString())/100;
          double weight = Double.parseDouble(field_weight.getText().toString());
          double BMI = weight / (height * height);
          //Present result
          view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));
          //Give health advice
          if(BMI > 25) {
              view_suggest.setText(R.string.advice_heavy);
          } else if(BMI < 20) {
              view_suggest.setText(R.string.advice_light);
          } else {
              view_suggest.setText(R.string.advice_average);
          }
      }
    };
}
  •  添加对话框(Dialog)

  本节学习如何显示对话框。在本节中,我们要产生一个应用程序中常见的“关于”页面,我们的“关于”页面将以弹出对话框的方式表现。所需要做的是编写负责处理对话框的“openOptionsDialog”函数,并将之附加在原本应用程序中“calcBMI”这个按钮组件的“OnClickListener”方法上。当我们按下“计算BMI值”按钮时,即弹出对话框。

修改 MainActivity.java

private Button.OnClickListener calcBMI = new Button.OnClickListener() {
        public void onClick(View v) {
            ...
            } else {
                view_suggest.setText(R.string.advice_average);
            }
            openOptionsDialog();
        }
    };

private void openOptionsDialog() {
        new AlertDialog.Builder(MainActivity.this)
                .setTitle(R.string.about_title)
                .setMessage(R.string.about_msg)
                .setPositiveButton(R.string.ok_label,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                            }
                        }
                ).show();
    }

新增 res/layout/string.xml

<resources>
    ...
    <string name="about_title">关于 Android BMI</string>
    <string name="about_msg">Android BMI Calc</string>
    <string name="ok_label">确认</string>
</resources>

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄