天天看點

Android學習筆記(36):Android的兩種事件處理方式

android提供了兩種事件處理的方式:基于回調的事件處理 和 基于監聽的事件處理。

我們來說的容易了解一點:

(1)基于回調的事件處理就是繼承gui元件,并重寫該元件的事件處理方法。除了一些特定的情況,大部分情況使用基于回調的事件處理方式并不是最好的選擇。

(2)基于監聽的事件處理就是在監聽器中定義事件的處理方式,再為元件綁定監聽器。這種方式無疑是更能夠展現面向對象思想的。

基于回調的事件處理:

view類包含如下的方法可以用于重寫:

boolean onkeydown(int keycode,keyevent event):按下某個按鍵時觸發

boolean onkeyup(int keycode,keyevent event):松開某個按鍵時觸發

boolean onkeylongpress(int keycode,keyevent event):長按某個按鍵時觸發

boolean onkeyshortcut(int keycode,keyevent event):按下某個快捷鍵時觸發

boolean ontouchevent(motionevent event):觸摸螢幕時觸發

我們注意到傳回值都是一個boolean值,這用于辨別該方法能否完全處理該事件。傳回true表示能完全處理,事件不會傳播出去,傳回false表示不能完全處理,事件會傳播出去。交給下面的事件處理方法處理。

基于監聽的事件處理:

這是一種委派式的事件處理方式:普通元件(事件源)将事件處理委托給(綁定)事件監聽器,事件源發生指定的事件時,通知事件監聽器來處理該事件。

下圖展示的是基于監聽的事件處理流程圖:

Android學習筆記(36):Android的兩種事件處理方式

了解下下面這幾種概念:

事件源:就是各種gui元件。

事件監聽器:各種xxxlistener類,需要實作事件處理方法的接口。

注冊監聽器:調用事件源的setxxxlistener(xxxlistener)方法。

view包含如下幾個内部接口:

view.onclicklistener:處理單擊事件

view.oncreatecontextmenulistener:處理單擊上下文菜單項的事件

view.onfocuschangelistener:處理焦點改變事件

view.onkeylistener:處理按鍵事件

view.onlongclicklistener:處理長按事件

view.ontouchlistener:處理觸摸事件

一個事件監聽器可以被多個gui元件所共用。

實作事件監聽器可以有如下幾種形式:

内部類、外部類、activity本身實作,匿名内部類、直接綁定到标簽(這是特殊但很友善的形式)。

這各種實作如果熟悉java的話,實作都是不難的。

繼續閱讀