中山大學智慧健康服務平臺基礎的事件處理
一、實驗題目
中山大學智慧健康服務平臺應用開發
第五週任務 基礎的事件處理
二、實現內容
實現一個Android應用,介面呈現如圖中的效果。
要求
- 該介面為應用啟動後看到的第一個介面。
- 各控制元件處理的要求
- 點選搜尋按鈕:
- 如果搜尋內容為空,彈出Toast資訊“搜尋內容不能為空”。
- 如果搜尋內容為“Health”,根據選中的RadioButton項彈出“搜尋成功”對話方塊。
- 點選“確定”,彈出Toast資訊——對話方塊“確定”按鈕被點選。 點選“取消”,彈出Toast 資訊——對話方塊“取消”按鈕被點選。 否則彈出搜尋失敗對話方塊,對話方塊點選效果同上。
- RadioButton選擇項切換:選擇項切換之後,彈出Toast資訊“XX被選中”,例如從圖片切換到視訊,彈出Toast資訊“視訊被選中”
- 點選搜尋按鈕:
三、課堂實驗結果
(1)實驗截圖
- 搜尋內容為空:
- 輸入Health:
- 點選確定按鈕:
- 點選取消按鈕:
- 輸入錯誤資訊搜尋失敗:
- RadioButton選擇項切換:
(2)實驗步驟以及關鍵程式碼
按照題目的要求順序來實現相關的程式碼。關鍵是給搜尋按鈕加一個監聽函式,點選“搜尋”就會執行函式。通過searchText.getText().toString()
得到輸入框中的內容,根據輸入的不同執行不同的語句。下面是輸入為空時的程式碼:
if (TextUtils.isEmpty(searchText.getText().toString())) { Toast.makeText(getApplication(), "搜尋內容不能為空", Toast.LENGTH_SHORT).show(); }
同理在輸入為"Health"時提示"搜尋成功",注意在前面加上radioButton.getText().toString()
得到選中按鈕的內容。
彈出對話方塊後,對話方塊採用了鏈式呼叫,使用setTitle()和setMessage()等方法,這些函式的返回值都是當前對話方塊物件,程式碼如下:
alertDialog.setTitle("提示").setMessage(radioButton.getText(). toString()+"搜尋成功").setPositiveButton("確認", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Toast.makeText(getApplicationContext(), "對話方塊“確定”按鈕被點選",Toast.LENGTH_SHORT).show(); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Toast.makeText(getApplicationContext(), "對話方塊“取消”按鈕被點選",Toast.LENGTH_SHORT).show(); } }).create();
當輸入既不是空也不是Health時,彈出搜尋失敗,程式碼和上述類似。
最後一步是在切換button按鈕時彈出Toast資訊“XX被選中”。關鍵在於給radioGroup
加一個監聽函式,那麼在切換時執行函式即可。程式碼如下:
String id = "";
RadioButton radio1 = findViewById(R.id.radio_button1);
if (radio1.getId() == checkedId) id = radio1.getText().toString();
RadioButton radio2 = findViewById(R.id.radio_button2);
if (radio2.getId() == checkedId) id = radio2.getText().toString();
RadioButton radio3 = findViewById(R.id.radio_button3);
if (radio3.getId() == checkedId) id = radio3.getText().toString();
RadioButton radio4 = findViewById(R.id.radio_button4);
if (radio4.getId() == checkedId) id = radio4.getText().toString();
Toast.makeText(getApplication(), id + "被選中", Toast.LENGTH_SHORT).show();
程式碼顯得比較冗餘,但我暫時沒有想到其他辦法去來完成這一部分。
(3)實驗遇到的困難以及解決思路
這次實驗遇到的問題都比較小,很快都可以解決。比如開始寫對話方塊時一直不顯示,最後發現是漏掉了alertDialog.show();
。還有就是這一句RadioButton radioButton = findViewById(radioGroup. getCheckedRadioButtonId());
開始我把這一句寫在了監聽函式的外面,導致在點了搜尋按鈕後對話方塊中不是選中項,後來把這一句拖到函式裡面就行了。
然後就是切換button按鈕時彈出Toast資訊想了比較久,開始我準備直接看checkedId
的值,但發現這個值是一個很大的整數,使用起來並不方便,最後用了getId()
函式成功實現了這一部分。
四、實驗思考及感想
這次的實驗添加了很多邏輯的判斷,所以較第一次實驗UI佈局難度增大了很多,所以要花跟更多的時間去查詢相關的資料,否則都不會寫邏輯判斷語句。雖然老師給的PPT中已經包括了大部分的內容,但是自己寫起來還是會遇到很多的問題,例如我開始把setOnClickListener
寫在了onCreate
函式的外面,一直報錯button沒有這個函式,當時就懵了,後來把整個監聽事件寫在onCreate
裡面才解決。這個bug讓我明白不能單純照搬函式,而要理解函式之間的關係和作用。只要掌握了某個關鍵的語句用法,其他的都可以舉一反三,最後成功完成了這次實驗。
雖然是實驗完成了,但是還有很多函式和關鍵字的用法我還不是非常熟悉,所以還是應該花多一點時間去熟悉和了解函式語句的用法,這樣才可以在以後的實驗節省時間,提高效率。