在Android中,我們可以通過事件處理使UI與用戶互動(UI Events)。
UI的用戶事件處理,即View處理用戶的操作,在應用程序中幾乎不可避免。View是重要的類,它是與用戶互動的前線;在Android框架的設計中,以事件監聽器(event listener)的方式來處理UI的用戶事件。
Android框架提供了非常良好的UI事件處理機制。View是繪制UI的類,每個View對象都可以向Android框架注冊一個事件監聽器。每個事件監聽器都包含一個回調函數(callback method),這個回調函數(callback method)主要的工作就是回應或處理用戶的操作。
Event Listener: Click Listener例子
以「用戶觸碰(touch)」的動作來說,當View要處理用戶觸碰的事件時,就要向Android框架注冊View.OnClickListener事件監聽器;當「touch」事件發生時,Android框架便回調事件監聽器裡的回調函數。
View.OnClickListener是click listener,顧名思義,這是UI的「Click動作監聽器」;當用戶對View進行Click操作時(即觸控上的UI組件),Android框架便會回調這個View.OnClickListener的回調函數。
View.OnClickListerner的回調函數為onClick()。
這裡所提到的監聽器泛指event listener,主要用來「監聽」用戶的各種動作。除了View.OnClickListener外,Android框架還有以下的event listener(及其callback method):
- View.OnLongClickListener: onLongClick()
- View.OnFocusChangeListener: onFocusChange()
- View.OnKeyListener: onKey()
- View.OnTouchListener: onTouch()
- View.OnCreateContextMenuListener: onCreateContextMenu()
另外一種UI事件的機制為事件處理器(event handler),event handler與event listener是不一樣的處理機制。這個留著以後再研究。
以Android所提供的View.OnClickListener來說明程序實現方法。一個較為良好的實現方法是在Acitivty類裡實現View.OnClickListener界面,即:
- public class YypClickListenerActivity extends Activity implements View.OnClickListener{
- ...
- }
上面的代碼用到了面向對象的接口技術,每一個View都可以注冊一個event listener,當Android框架收到「click」事件後,便回調event listener的callback method。以Button類為例,當我們想要處理用戶觸控按鈕事件時,就要調用Button類的setOnClickListener()方法來注冊click listener。上述的實現方法是,直接在的Activity類YypClickListenerActivity裡實現View.OnClickListener,因此上述Button類的click listener為「this」。如下圖:
注冊click listener的程序代碼如下:
- Button button = (Button)findViewById(R.id.btn);
- button.setOnClickListener(this);
在onCreate()裡先找到Button組件,它的click listener為this,接著在的Activity類裡實現onClick()。onClick()方法的代碼如下,我們以Toast類來回應信息給用戶:
- public void onClick(View v){
- Toast.makeText(this,"http://www.linuxidc.com",Toast.LENGTH_LONG).show();
- }
完整的代碼很簡單:
- package com.android;
-
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.Toast;
-
- public class YypClickListenerActivity extends Activity implements View.OnClickListener{
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- Button button = (Button)findViewById(R.id.btn);
- button.setOnClickListener(this);
- }
-
- public void onClick(View v){
- Toast.makeText(this,"http://www.linuxidc.com",Toast.LENGTH_LONG).show();
- }
- }
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11