Hello World 進階了 -- 事件處理 Part 1

Hello World 進階了 -- 事件處理 Part 1

This document is provided as is. You are welcomed to use it for non-commercial purpose.
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
請勿轉貼


Android 的事件處理機制類似 Java,但是它還多提供了一種方式,讓單純的事件處理變的簡單。這兩種方式我們都會介紹,在本文中我們 先介紹簡單版的。

  1. 仔細檢查 Button 元件的選項(如下圖所示),其中有一個名為 OnClick 的選項,請點選它。

  2. 點選後的畫面如下;請在文字欄位內輸入 "onClickButton":

    以上兩個步驟的目的在於:如果使用者點選了按鈕,則 Android 的系統(或稱 JVM)會呼叫 "onClickButton" 這個方法。 從說明中也可以了解,其實 "onClickButton" 的名稱可以改成你喜歡的名稱。
  3. 根據 Android 的規定,事件處理方法的 header 必須符合下列格式:
    public void 名稱(View 變數名稱) { … }
    由於 onClickButton 事件處理方法,因此我們必須在程式碼中定義出如下的方法:
    public void onClickButton(View view) { … }
  4. 那麼在使用者點選了按鈕之後,onClickButton() 要做什麼事呢?讓我們先把事情簡化,假設使用者輸入 eric, 則 onClickButton() 會將 Hello eric 顯示在文字欄位。既然如此,onClickButton() 的主要工作就是取得文字欄位的 資料,然後把取得的資料加上 Hello 後把結果擺放到文字欄位;也就是以下三個動作:
    1. 程式必須知道文字欄位的物件,取得的方式是 EditText input = (EditText) findViewById(R.id.editText1);
    2. 從 input (也就是文字欄位物件)取得文字內容的方式: input.getText()
    3. 把字串設定到 input 的方式:input.setText()
  5. 對於 input 的取得方式(即 EditText input = (EditText) findViewById(R.id.editText1);),我們需要進一步說明。首先, 我們先看看 R;R 是什麼?R 是 R.java,該類別是由 ADT 自動產生的,其代表這個程式的資源(resources),該檔案位於 gen/tw.edu.nchu.mis.jlu/R.java, 開啟該檔案後的畫面如下:(請小心,該檔案的內容切 勿修改)

    這個檔案的內容足以解釋什麼是  R.id.editText1。根據 Java 的語法,R.id.ediText1 代表程式中的一項資源,而該資源的編號是 0x7f06000,在整個程式中,該編號是唯一的;在 Eclipse 的畫面中(我們之前也解釋過),該文字欄位的名稱是 editText1;更嚴格的說,其名稱是 R.id.ediText1。其實我們所有的資源都有 id;按鈕是 R.id.button1,字串資源有代表 hello 的 R.string.hello。
  6. 在程式中要如何某一特定的元件呢?最簡單的方式就是經由 finViewById(編號),由於程式中提供的編號代表一個文字欄位,而文字欄位的資料型態是 EditText,因此經過轉型之後,即可取得該文字欄位的物件 input。請開啟 src/tw.edu.nchu.mis.jlu/HelloNameActivity.java, 並將三個步驟的程式撰寫如下:

  7. 我們完成了,心急的人可以進行編譯和執行了。想進一步了解的人,可能想知道程式中的 R.layout.main 代表什麼? 其實之前 R.id.editText1 的說明,大家應該都大概知道 R.layout.main 是什麼了,更明確的說,它就是 res/layout/main.xml; 這種設計方式可以讓我們輕易的利用 main.xml 來排版而完全不必理會程式碼,真棒,不是嗎?

    請在 Eclipse 上點選 Run,然後再跳出來的視窗點選 "Android Application"。程式應該會經過編譯,然後 Eclipse 會自動帶出模擬器,然後 在模擬器中執行該程式;該程式的執行畫面如下:



Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu

沒有留言:

張貼留言