標籤:
郭孝星
微博:郭孝星的新浪微博
郵箱:[email protected]
部落格:http://blog.csdn.net/allenwells
Github:https://github.com/AllenWells
事件處理:不管是案頭應用還是手機應用都需要去響應使用者的動作,這種為使用者動作提供響應的機制就是事件處理。
Android提供了兩套事件處理機制,如下所示:
一般來說,基於回調的事件處理可用於處理一些通用性的事件,但對於某些特定的事件只能使用基於監聽的事件處理。而且基於監聽的事件處理會被優先觸發。
下面我們來詳細介紹一些這兩種事件處理方式。
一 基於監聽的事件處理
基於監聽的事件處理是一種委派式的事件處理機制,普通組件(事件來源)將整個事件處理委託給特定的對象(事件監聽器),當該事件來源發生指定的事件時,就通知所委託的事件監聽器,由事件監聽器來處理這個事件。
1.1 基於監聽的事件處理模型
在基於監聽的事件處理模型包含以下3類對象:
- 事件來源:即Event Source,事件發生的場所,通常就是各組件。
- 事件:即Event,事件封裝了介面組件發生的特定事情,通常是一次使用者的相關操作,如果程式需要獲得介面組件上所放生事件的相關資訊,一般是通過Event對象來取得。
- 事件監聽器:即Event Listener,負責監聽事件來源所發生的事件,並對各種事件作出響應。
基於監聽的事件處理模型如所示:
基於監聽的事件處理模型Visio源檔案下載
1.2 事件來源監聽器
基於監聽的事件處理編程步驟如下所示:
- 擷取普通介面組件(事件來源),即被監聽的對象。
- 實現事件監聽器類,該類實現一個XxxListener的介面。
- 呼叫事件源的setXxxListener方法將事件監聽器對象註冊給普通組件。
舉例
定義一個Button作為事件來源
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_horizontal" ><EditText android:id="@+id/show" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false" /><Button android:id="@+id/bn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="單擊我" /></LinearLayout>
實現監聽器監聽事件來源。
import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;// 實現事件監聽器介面public class ActivityListener extends Activity implements OnClickListener{ EditText show; Button bn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); show = (EditText) findViewById(R.id.show); bn = (Button) findViewById(R.id.bn); // 直接使用Activity作為事件監聽器 bn.setOnClickListener(this); } // 實現事件處理方法 @Override public void onClick(View v) { show.setText("bn按鈕被單擊了!"); }}
在在基於監聽的事件處理模型包含以下3類對象中,事件來源隨處可見,事件由Android系統產生,所以我們需要關注的主要還是實現事件監聽器,常見的事件監聽器有4種,如下所示:
- 內部類形式:將事件監聽器定義成當前類的內部類。
- 外部類形式:將事件監聽器定義成一個外部類。
- Activity本身作為事件監聽器:讓Activity本身實現監聽器介面,並實現事件處理方法。
- 匿名內部類形式:使用匿名內部類建立事件監聽器對象。
二 基於回調的事件處理
基於回調的事件處理沒有事件監聽器,當使用者在介面組件激發某個事件時,組件自己特定的方法將會負責處理該事件。
2.1 基於回調的事件傳播
幾乎所有基於回調的時間處理方法都有一個boolean類型的傳回值,該傳回值用於標識該處理方法是否能完全處理該事件。
著作權聲明:當我們認真的去做一件事的時候,就能發現其中的無窮樂趣,豐富多彩的技術宛如路上的風景,邊走邊欣賞。
【Android應用開發技術:應用組件】Android事件處理機制