refatcor你的程式吧!
話先說在前頭
如果我們開始寫程式之前沒有先好好的規劃一下的話!通常會隨著功能越加越多,程式越寫越亂!這時候我們就需要refactor一下程式囉!refactor中文翻成重構,其實也有點像是重新整理程式碼的感覺。不過每個人整理的習慣不太一樣,所以這邊我並沒有完全按照gasolin的程式碼做囉!看到散落一地的 findViewsById 其實有點難過,整理的方式有兩種,一種是集中起來在一個procedure裡面,另一種就是寫成物件的屬性囉!
先來示範第一種方式
- 先在 onCreate() 的最下面新增 findViews(); 然後將滑鼠游標移到紅色的線上,這時候會跳出一個視窗,直接點[1 quick fix available: Create method 'findViews()']
- 這時候eclipes在下面就會新增一個 findViews() 的procedure。
- 然後接下來把所有的 findViewsById 搬過去,並宣告成變數就可以啦!
- 首先我們先把 Button button = (Button)findViewById(R.id.btnCalc); 搬過去。
- 搬過去之後,button.setOnClickListener(calcBMI); 下面會出現紅線,將滑鼠游標移到紅線上面,然後選擇第二個[Create field 'button'],這樣eclipse就會幫你建出 Button 的變數宣告了。
- 然後記得將 Button button = (Button)findViewById(R.id.btnCalc); 前面的 Button 拿掉。
- 重複1~3的動作,將所有宣告變數跟取得變數值得程式都搬移好吧。最後程式如下所示。
- package com.demo.android.bmi2;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.TextView;
- import android.view.View;
- import android.view.View.OnClickListener;
- import java.text.DecimalFormat;
- public class Bmi2 extends Activity {
- private View btnCalc;
- private TextView fieldHeight;
- private TextView fieldWeight;
- private TextView result;
- private TextView fieldSuggest;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- findViews();
- setListeners();
- }
- private void setListeners() {
- // TODO Auto-generated method stub
- btnCalc.setOnClickListener(calcBMI);
- }
- private void findViews() {
- // TODO Auto-generated method stub
- btnCalc = (Button)findViewById(R.id.btnCalc);
- fieldHeight = (EditText)findViewById(R.id.etHeight);
- fieldWeight = (EditText)findViewById(R.id.etWeight);
- result = (TextView)findViewById(R.id.tvResult);
- fieldSuggest = (TextView)findViewById(R.id.tvSuggest);
- }
- private OnClickListener calcBMI = new OnClickListener()
- {
- public void onClick(View v)
- {
- DecimalFormat nf = new DecimalFormat("0.00");
- double height = Double.parseDouble(fieldHeight.getText().toString())/100;
- double weight = Double.parseDouble(fieldWeight.getText().toString());
- double bmi = weight / (height * height);
- result.setText("Your BMI is " + nf.format(bmi));
- if(bmi>25)
- {
- fieldSuggest.setText(R.string.advice_heavy);
- }
- else if(bmi<20)
- {
- fieldSuggest.setText(R.string.advice_light);
- }
- else
- {
- fieldSuggest.setText(R.string.advice_avg);
- }
- }
- };
- }
沒有留言:
張貼留言