6.2 MainActivity 中取得畫面元件

開啟 MainActivity.kt,在 onCreate 方法中的 setContentView 語法的下一行,新增以下程式碼:

val edWeight = findViewById<EditText>(R.id.ed_weight)
val edHeight = findViewById<EditText>(R.id.ed_height)
val bHelp = findViewById<Button>(R.id.b_help)

上述程式碼呼叫了 MainActivity 的父類別 Activity 提供的 findViewById 方法,可利用先前在畫面上為元件設定的 id 值,取得元件,回傳的型態為 View,原本都得再經過轉型後得到元件原本型態(多型應用),但從 Android Studio 3 開始,工具會自動轉換型態,不需加上轉型語法了。畫面上的 Help 按鈕,也使用同樣方法取得 bHelp 物件。

在輸入類別名稱時,第一個字母請大寫,例如欲輸入 EditText 時,只需輸入部份如「Edi」,此時自動完成的下拉選單會出現符合的類別名稱,請以上下鍵選擇「EditText (android.widget)」按下 Enter 鍵,這樣才會自動加入 import 語法,如下圖:

區域變數提昇為屬性

可是,上述的「edWeight」、「edHeight」與「bHelp」三個物件都是 在 onCreate 方法中宣告的區域變數,在 onCreate 方法外是無法被存取的, 應該將這三個變數提昇為類別的屬性 (Property),也就是放在 MainActivity 內的第一層中。可以利用 Kotlin 語言的 lateinit 語法可定義一個在之後才會初始化的屬性,在第一層中定義屬性 (Property),之後在 onCreate 方法中再取得元件,如下圖:

抽取程式碼成為方法

當需從一個畫面中取得很多個元件時,這些在 onCreate 方法中的程式碼會略顯雜亂,可設計一個方法,再將這些取得元件的程式碼移到方法中。通常我們會將方法命名為「findViews」,Android Studio 提供快速鍵可將程式碼抽出成為方法,請先選取想要抽出的程式碼,如本例在 onCreate 方法中的三個 findViewById 語法,如下圖:

再按下 Extract Method 抽取程式碼的快速鍵「Ctrl + Alt + M」(Mac 為「Option + Command + M」), 出現對話框後,再輸入方法的名稱「findViews」,如下圖:

最後按下 Enter 鍵,程式碼很快就完成原本繁複的工作,如下:

Last updated