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表示不能完全處理,事件會傳播出去。交給下面的事件處理方法處理。
基于監聽的事件處理:
這是一種委派式的事件處理方式:普通元件(事件源)将事件處理委托給(綁定)事件監聽器,事件源發生指定的事件時,通知事件監聽器來處理該事件。
下圖展示的是基于監聽的事件處理流程圖:
了解下下面這幾種概念:
事件源:就是各種gui元件。
事件監聽器:各種xxxlistener類,需要實作事件處理方法的接口。
注冊監聽器:調用事件源的setxxxlistener(xxxlistener)方法。
view包含如下幾個内部接口:
view.onclicklistener:處理單擊事件
view.oncreatecontextmenulistener:處理單擊上下文菜單項的事件
view.onfocuschangelistener:處理焦點改變事件
view.onkeylistener:處理按鍵事件
view.onlongclicklistener:處理長按事件
view.ontouchlistener:處理觸摸事件
一個事件監聽器可以被多個gui元件所共用。
實作事件監聽器可以有如下幾種形式:
内部類、外部類、activity本身實作,匿名内部類、直接綁定到标簽(這是特殊但很友善的形式)。
這各種實作如果熟悉java的話,實作都是不難的。