Bmi專案功能與事件處理,什麼是匿名類別?

作者 | 2017-04-14

按鈕事件處理-匿名類別

Bmi範例專案中的計算BMI按鈕的事件處理採用的方式是onClick屬性,那是因為Android為按鈕額外貼心的一種事件機制設計。我們也可使用「事件傾聽器」處理按下按鈕時的事件,使用的方式是:

  1. 取得畫面中的按鈕物件
  2. 為按鈕物件註冊事件傾聽器
  3. 在傾聽器的方法中實作程式碼

本範例練習目的是在使用者按下畫面中的「Help」按鈕後,出現說明對話框。

取得按鈕物件

開啟MainActivity,在onCreate方法中設定畫面setContentView方法之後的程式碼,使用findViewById方法取得Help按鈕,並轉型,程式碼如下:

上圖程式碼已在本章之前實作完成,並將bHelp物件轉換成屬性,且將取得元件的幾行程式碼抽取成為findViews方法,因此,在執行findViews方法之後,屬性bHelp即是我們想要處理的按鈕物件,如下圖:

由上圖標示處開始後續程式設計即可。

為按鈕物件註冊事件傾聽器

呼叫按鈕的setOnClickListener方法可註冊一個事件傾聽器,如下圖:

在方法的參數中,需要一個View.OnClickListener的物件,最快的方式是在方法內產生一個匿名類別,而OnClickListener匿名類別的寫法如下:

 

使用new關鍵字,並在匿名類別中實作必要的方法,OnClickListener只有一個必要實作的onClick方法,將上述的匿名類別放在setOnClickListener方法內即可。

Android Studio在開發人員輸入「new」關鍵字時,會自動偵測目前游標位置需要的物件型態,若是所在處適合匿名類別的物件,會自動完成複雜的程式碼,請在setOnClickListener方法中輸入「new On」也就是OnClickListener的部份前導字母,類別名稱第一個字請使用大寫的O,如下圖:

此時下拉選單會自動出現,並顯示OnClickListener{…}的選擇項目,請按下Enter鍵選擇後,即會自動將匿名類別的程式碼自動加在方法內,如下圖:

接著即可在上圖第31行中撰寫按下按鈕後應執行的程式碼了,利用Android Studio所提供的方便功能,可避免人為的失誤,也讓開發人員能將心思放在程式邏輯的設計上。

在傾聽器的方法中實作程式碼

在本例中,按下Help按鈕,希望能夠顯示BMI值的運算公式,在此使用對話框實作,程式碼如下圖所示:

讀者發現了嗎? 在上圖第31行Builer建構子內的this出現錯誤了,錯誤訊息如下:

意思是,在Builder建構子中無法接受放入一個View.OnClickListenr的物件,在匿名類別中使用「this」其代表的是該匿名類別,而不是我們想要的外部公開類別MainActivity啊,不用擔心,在匿名類別中想要取得外部類別的this,需使用「外部類別名稱.this」。所以,將this改為「MainActivity.this」即可,如下圖:

執行後,按下畫面中的「Help(說明)」按鈕後,出現對話框。這即是使用匿名類別方式實作按鈕的事件處理,如下圖:

 

相關文章:

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *