1. 程式人生 > >中山大學智慧健康服務平臺基礎的事件處理

中山大學智慧健康服務平臺基礎的事件處理

一、實驗題目

中山大學智慧健康服務平臺應用開發

第五週任務 基礎的事件處理

二、實現內容

實現一個Android應用,介面呈現如圖中的效果。 在這裡插入圖片描述

要求

  • 該介面為應用啟動後看到的第一個介面。
  • 各控制元件處理的要求
    • 點選搜尋按鈕:
      • 如果搜尋內容為空,彈出Toast資訊“搜尋內容不能為空”。
      • 如果搜尋內容為“Health”,根據選中的RadioButton項彈出“搜尋成功”對話方塊。
      • 點選“確定”,彈出Toast資訊——對話方塊“確定”按鈕被點選。 點選“取消”,彈出Toast 資訊——對話方塊“取消”按鈕被點選。 否則彈出搜尋失敗對話方塊,對話方塊點選效果同上。
    • RadioButton選擇項切換:選擇項切換之後,彈出Toast資訊“XX被選中”,例如從圖片切換到視訊,彈出Toast資訊“視訊被選中”

三、課堂實驗結果

(1)實驗截圖

  1. 搜尋內容為空: 在這裡插入圖片描述
  2. 輸入Health: 在這裡插入圖片描述
  3. 點選確定按鈕: 在這裡插入圖片描述
  4. 點選取消按鈕: 在這裡插入圖片描述
  5. 輸入錯誤資訊搜尋失敗: 在這裡插入圖片描述
  6. 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讓我明白不能單純照搬函式,而要理解函式之間的關係和作用。只要掌握了某個關鍵的語句用法,其他的都可以舉一反三,最後成功完成了這次實驗。 雖然是實驗完成了,但是還有很多函式和關鍵字的用法我還不是非常熟悉,所以還是應該花多一點時間去熟悉和了解函式語句的用法,這樣才可以在以後的實驗節省時間,提高效率。