一拱礁、MainActivity
(一)整體結(jié)構(gòu)(略package+import)
1.public class MainActivity extends Activity
1)聲明成員變量
用private锋边,使外部通過get/set方法來獲取可以獲取的內(nèi)部數(shù)據(jù)通殃。Layout里面有什么舶掖,activity需要用到什么玛臂,就聲明什么
private EditText heightEditText;
private RadioGroup sexRadioGroup;
private Button resetButton;
private String sexString = "男";
*這里的sexString沒有賦初值的話,下面的onCheckedChanged方法就會(huì)崩潰辕近。因?yàn)槟J(rèn)是選擇男韵吨,若果測(cè)試者不改變選項(xiàng)的話,其實(shí)sexString里是沒有值的
2)入口方法 protected void onCreate(Bundle savedInstanceState)?
目錄式結(jié)構(gòu)移宅。只列出會(huì)用到的方法归粉。
tip:聲明完一個(gè)方法后,按Ctrl+1 自動(dòng)創(chuàng)建方法漏峰。
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//把mainactivity.java和activity_main.xml 聯(lián)系在一起
fineViews();//從布局代碼中找到相應(yīng)的控件
setLisenter();//用于監(jiān)聽糠悼。
3)private void setLisenter()
監(jiān)聽方法。包含多個(gè)內(nèi)部監(jiān)聽類浅乔。給按鈕添加點(diǎn)擊事件OnClickListener倔喂,要重寫OnClickListener()方法。當(dāng)按鈕狀態(tài)轉(zhuǎn)換時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用OnCheckedChangeListene方法
①sexRadioGroup.setOnCheckedChangeListener ( new OnCheckedChangeListener ( ) {? public void onCheckedChanged(RadioGroup arg0, int arg1 ) {}}? ? ? //設(shè)置RadioGroup狀態(tài)轉(zhuǎn)變時(shí)的監(jiān)聽靖苇。參數(shù)是監(jiān)聽對(duì)象程腹,創(chuàng)建方法是直接new济锄,然后重寫OnCheckedChangeListener()的OnCheckedChangeListener方法
②startTestButton.setOnClickListener ( new OnClickListener ( ) { public void onClick( View v) {}})
4)private void fineViews()
尋找控件遏暴》闵穑基本上用到哪個(gè)控件鲁捏,就要在此方法中 find 哪個(gè)控件芯砸。Ctrl+1 可以自動(dòng)添加強(qiáng)制類型轉(zhuǎn)換萧芙。
heightEditText = (EditText) findViewById(R.id.height_edt);
weightEditText = (EditText) findViewById(R.id.weight_edt);
sexRadioGroup = (RadioGroup) findViewById(R.id.sex_rg);
startTestButton = (Button) findViewById(R.id.start_test_btn);
resetButton = (Button) findViewById(R.id.reset_btn);
(二)局部細(xì)節(jié)
1.intent方法
(1)mainactivity
Intent intent = new Intent(MainActivity.this,BMIResultActivity.class);
跳轉(zhuǎn)頁面:通過intent類的對(duì)象實(shí)現(xiàn),創(chuàng)建intent類對(duì)象實(shí)現(xiàn)假丧,選擇雙參數(shù)構(gòu)造方法new Intent(MainActivity.this,BMIResultActivity.class)双揪。參數(shù)1:從哪個(gè)activity中起跳,參數(shù)2:跳到哪個(gè)activity中
intent.putExtra("height", height);
傳遞數(shù)據(jù):向BMIactivity傳遞數(shù)據(jù)用于顯示包帚,把要傳遞的數(shù)據(jù)放入intent中intent.putExtra(arg1,arg2) arg1是鍵渔期,arg2是值。通過arg1和arg2渴邦,就在intent中保存了一個(gè)鍵值對(duì)(一一對(duì)應(yīng))疯趟,則可通過鍵去找相應(yīng)的值。在取值時(shí)一定要保證鍵相同.
startActivity(intent);
實(shí)現(xiàn)跳轉(zhuǎn)
(2)BMIResultActivity
Intent intent = getIntent();
取出上個(gè)頁面的傳遞值
double height = intent.getDoubleExtra("height", 0);
從intent對(duì)象中谋梭,根據(jù)放入值的鍵來取相應(yīng)值
DecimalFormat format = new DecimalFormat("0.00");
對(duì)數(shù)據(jù)進(jìn)行格式化 DecimalFormat 構(gòu)造參數(shù):數(shù)據(jù)格式字符串信峻。格式化成0.00的格式
bmiTextView.setText("您的BMI指數(shù)為"+format.format(bmi));
把數(shù)據(jù)顯示到控件上
2.public void onCheckedChanged(RadioGroup arg0, int arg1)
參數(shù)①:狀態(tài)改變的RadioGroup對(duì)象。參數(shù)②:RadioGroup對(duì)象中被選中的按鈕的Id瓮床。根據(jù)參數(shù)2確定是哪個(gè)按鈕被選中盹舞。內(nèi)含switch方法或if方法
3.吐司 Toast.makeText()
Toast.makeText(MainActivity.this, "您選擇的性別是"+sexString, 1).show();
參數(shù)1:上下文,說明在那個(gè)頁面顯示吐司隘庄。參數(shù)2:顯示的內(nèi)容踢步。參數(shù)3:顯示的時(shí)間(秒)
4.getText()
String heightString = heightEditText.getText().toString().trim();
用getText()取出輸入內(nèi)容,返回值是Editable對(duì)象可變字符串丑掺。用toString()將其轉(zhuǎn)化為字符串获印,并用trim()方法去除其中沒用的字符,如:回車吼鱼。
5.類型轉(zhuǎn)換
double height = Double.valueOf (heightString)/100;
6.set方法
bodyStateImageView.setBackgroundResource(R.drawable.bmi_4);
bodyStateTextView.setText("您現(xiàn)在處于:\n嚴(yán)重肥胖狀態(tài)蓬豁,請(qǐng)立刻減肥");
在bodyStateTextView這個(gè)TextView里放入圖片和文字。
二菇肃、BMIResultActivity
(一)整體結(jié)構(gòu)
findViews();
三地粪、規(guī)范
(一)命名
1.變量命名
①全英文,不準(zhǔn)有拼音
②首字母小寫琐谤,之后所有單詞的首字母大寫(駝峰式命名法)
③遵循準(zhǔn)則
④變量名后綴盡量不縮寫蟆技,全拼(變量種類很多,可能有縮寫相同斗忌, 無法區(qū)分)
2.類名:所有首字母都大寫
(二)常識(shí)
1.Android 的界面叫activity质礼,包含
1)名字Activity.java(邏輯代碼) 一定是繼承自activity類,頁面邏輯织阳,一般包含
1. onCreate(Bundle savedInstanceState) 加載頁面時(shí)眶蕉,Android系統(tǒng)調(diào)用,程序員只需在oncreate里寫邏輯代碼
2. public boolean onOptionsItemSelected(MenuItem item) 菜單邏輯
3.onOptionsItemSelected(MenuItem item) 菜單某一項(xiàng)被選中
2)名字.xml 頁面的布局文件
2.代碼書寫流程唧躲。在寫方法時(shí)造挽,不要馬上寫方法主邏輯碱璃,應(yīng)該先進(jìn)行異常處理。當(dāng)把所有異常處理完成后饭入,再寫主邏輯嵌器。
3.注意事項(xiàng)
1)判斷字符串是否為空,用textUtils的isEmpty()方法谐丢,而不是用字符串本身(height.isEmpty)
2) 在代碼中用到上下文作為參數(shù)進(jìn)行傳遞時(shí)爽航,一定要確定this確定的是那個(gè)類。
3) activity繼承自Context乾忱,當(dāng)有系統(tǒng)方法要求傳遞Context時(shí)讥珍,有可能就是傳遞activity。(Context有很多子類)
4)前端應(yīng)用要遵循顯示邏輯與數(shù)據(jù)運(yùn)算邏輯分離窄瘟,不能混在一起串述。activity理想狀態(tài)只有控制頁面顯示的代碼。
5) 通過對(duì)象來處理頁面數(shù)據(jù)寞肖,做到數(shù)據(jù)邏輯與代碼邏輯的分離
(三)調(diào)試
1.代碼錯(cuò)誤
當(dāng)bug崩潰時(shí)纲酗,根據(jù)logCat的提示(找自己能看懂的代碼,比如指示了哪一行出錯(cuò)的錯(cuò)誤提示)新蟆。根據(jù)提示觅赊,在這幾行打幾個(gè)斷點(diǎn),用小蟲debug琼稻。debug會(huì)停在斷點(diǎn)處吮螺,鼠標(biāo)放上去會(huì)浮現(xiàn)變量值等具體情況。之后可用步入等一步步調(diào)試帕翻。
如果是數(shù)據(jù)出錯(cuò)鸠补,則順著數(shù)據(jù)流一步步查看。(比如BMI項(xiàng)目中的sexString嘀掸。程序崩潰是因?yàn)閟exString沒有賦初值)
2.代碼沒找出錯(cuò)誤
或許編譯時(shí)出現(xiàn)混亂紫岩,點(diǎn)project->clean... 清空編譯。在點(diǎn)擊右上角DDMS睬塌,左側(cè)菜單欄的擴(kuò)展項(xiàng)目里有“reset adb”泉蝌。再重新編譯。
3.異常處理
在寫主邏輯前先進(jìn)行異常處理揩晴,如BMI項(xiàng)目中未輸入值便點(diǎn)擊測(cè)試按鈕
if (TextUtils.isEmpty(heightString)) {
heightEditText.setError ("請(qǐng)輸入身高");
return;}