Hello World 進階了 -- 事件處理 Part 2-2
This document is provided as is. You are welcomed to use it for
non-commercial purpose.
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
請勿轉貼
在本文中,我們將繼續介紹 Android 的第二種事件處理機制;在 Part 2-1 一文中,我們介紹了如何利用內隱類別(inner class)的方式,嚴格來說,該種內隱類別稱之為成員內隱類別(member inner class)。根據個人的教學經驗,這種用法在說明上比較清楚,可是在 Google 搜尋到的範例中,卻比較少見過,比較常見的用法稱之為匿名內隱類別(anonymous inner class)。
匿名內隱類別的用法跟 Part 2-1 非常類似,以範例說明如下:
- 首先在程式中,我們必須先找出按鈕物件,根據之前的說明,找出 Button 元件的方式如下:
Button button = (Button) findViewById(R.id.button1);
- 有了按鈕物件 button,而且我們需要註冊事件發生時的處理物件,註冊方式如下:
button.setOnClickListener(事件處理物件);
- 根據 Android 的規定,事件處理物件的類別型態必須是 OnClickListener 的子類別,而利用匿名內隱類別的方式如下:
button.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { EditText input = (EditText) findViewById(R.id.editText1); input.setText("Hello " + input.getText()); } } );
其中,上列紅色程式碼的部分代表要產生一個OnClickListener 的子類別的物件,而該子類別的內容就是藍色程式碼的部分;由於 OnClickListener 子類別的名稱並未定義,因此這個內隱類別稱之為匿名內隱類別。從兩個內隱類別的定義方式,我們可以看出匿名內隱類別是無法重複使用的,但是成員內隱類別(也就是 HelloButton)是可以重複使用的。
- 為了確認剛剛的說明,完整的程式碼如下所示:(請自行練習完成)
public class HelloName extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { EditText input = (EditText) findViewById(R.id.editText1); input.setText("Hello " + input.getText()); } }); } }
學習到這裡,腦海中是不是已經浮現了一些想法;例如,點擊下拉式選單或者其他 GUI 元件,其相關的 Listener 有哪些呢?在學習時,除了剛剛介紹的一些概念之外,重要的就是從範例中學習,看不懂的地方就要去看 API 的用法。Listener 相關的套件(package)名稱為 android.view,從 API 文件中可以看出下列 Listener:
- View.OnDragListener
- View.OnFocusChangeListener
- View.OnKeyListener
- View.OnLongClickListener
Written by: 國立中興大學資管系呂瑞麟 Eric Jui-Lin Lu
沒有留言:
張貼留言