天天看點

Android--事件處理

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,如需轉載請自行聯系原作者

繼續閱讀