Android提供了強大的事件處理機制,包括兩套事件處理機制:
基于監聽的事件處理。
基于回調的事件處理。
一、基于監聽的事件處理
在事件監聽的處理模型中,主要涉及如下三類對象:
Event Source(事件源):事件發生的場所,通常就是各個元件。
Event(事件):事件封裝了界面元件換上發生的特定事情。
Event Listener(事件監聽器):負責監聽事件源所發生的事件,并對各種時間做出相應的相應。
Android的事件處理機制是一種委派式事件處理方式:普通元件(事件源)将整個事件處理委托給特定的對象(事件監聽器);當該事件源發生指定的事件時,就通知所委托的事件監聽器,由事件監聽器來處理這個事件。
所謂事件監聽器,其實就是實作了特定接口的Java類的執行個體。在程式中實作事件監聽器,通常有如下幾種形式:
内部類形式:将事件監聽器類定義成目前類的内部類。
外部類形式:将事件監聽類定義成一個外部類。
Activity本身作為事件監聽器類:讓Activity本身實作監聽器接口,并實作事件處理方法。
匿名内部類形式:使用匿名内部類建立時間監聽器對象。
1、外部類形式
使用頂級類定義事件監聽器類的形式比較少見,是以不推薦使用,主要因為如下兩個原因:
事件監聽器通常屬于特定的GUI界面,定義成外部類不利于提高程式的内聚性。
外部類形式的事件監聽器不能自由通路建立GUI界面的類中的元件,程式設計不夠簡潔。
使用步驟:
建立一個新類,實作需要監聽事件的監聽器接口。
在使用的時候,給某事件源的特定事件綁定此類。
示例:
事件處理類,監聽了OnLongClick事件。
<a></a>
調用:
2、Activity本身作為事件監聽器類
這種形式使用Activity本身作為監聽器類,隻需實作需要的監聽器接口,就可以直接在Activity類中定義事件處理方法,這種形式非常簡潔。但是這種形式可能造成程式結構混亂,因為Activity的主要職責是完成界面初始化工作。
示例 :
3、直接綁定到XML标簽中
在Android中,可以直接把事件處理綁定到XML标簽中。
處理事件:
4、匿名内部類作為事件監聽器
因為大部分時候,事件處理器都是沒有複用價值的,是以大部分事件監聽器隻是臨時使用一次,是以使用匿名内部類形式的事件監聽器更合适。這也是最廣泛的用法。
二、基于回調的事件處理
對于基于回調的事件處理模型來說,事件源與事件監聽器是統一的,或者說事件監聽器完全消失了。當使用者在GUI元件上激發某個事件時,元件自己特定的方法将會負責處理該事件。此處理方法一般會有一個boolean類型的傳回值,該傳回值用于辨別該處理方法是否能完全處理該事件。如果傳回true,表明該處理方法已完全處理該事件,該事件不會傳播出去。如果傳回false,表明該處理方法并未完全處理該事件,該事件會傳播出去。
基于回調的事件處理方式主要用于重寫新的元件,繼承原元件的類,然後對其事件進行重寫。在布局的時候,直接使用重寫好的新元件。此時如果觸發事件,則由新元件執行處理。(此方式一般不常用)
總結:對于基于監聽的事件處理模型來說,事件源和事件監聽器是分離的,當事件源上發生特定事件之後,該事件交給事件監聽器負責處理;對于基于回調的事件處理模型來說,事件源和事件監聽器是統一的,當事件源發生特定事件之後,該事件還是由事件源本身負責處理。
本文轉自承香墨影部落格園部落格,原文連結:http://www.cnblogs.com/plokmju/archive/2013/03/13/2955175.html,如需轉載請自行聯系原作者