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

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 非常類似,以範例說明如下:

  1. 首先在程式中,我們必須先找出按鈕物件,根據之前的說明,找出 Button 元件的方式如下:
    Button button =  (Button) findViewById(R.id.button1);
          
  2.  

  3. 有了按鈕物件 button,而且我們需要註冊事件發生時的處理物件,註冊方式如下:
    button.setOnClickListener(事件處理物件);
          
  4.  

  5. 根據 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)是可以重複使用的。

  6. 為了確認剛剛的說明,完整的程式碼如下所示:(請自行練習完成)
    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

沒有留言:

張貼留言