一.基于監(jiān)聽的事件處理
在事件監(jiān)聽的處理模型中,主要涉及如下三類對象:
Event Source(事件源):事件發(fā)生的場所,通常是各個組件。
Event(事件):事件封裝了界面組件上發(fā)生的特定的事情。
Event Listener(事件監(jiān)聽器):負責監(jiān)聽事件源所發(fā)出的事件,并對各事件做出相應的響應。
基于監(jiān)聽的事件處理模型編程步驟如下:
1.獲取普通界面組件(事件源),也就是被監(jiān)聽的對象。
2.實現(xiàn)事件監(jiān)聽器類,該監(jiān)聽器是一個java類,必須實現(xiàn)一個XxxListener接口。
3.調(diào)用事件源的setXxxListener方法將事件監(jiān)聽器對象注冊給普通組件(事件源)。
在程序中實現(xiàn)事件監(jiān)聽,通常有以下幾種方式:
1.內(nèi)部類形式:將事件監(jiān)聽器類定義成當前的內(nèi)部類。
2.外部類形式:將事件監(jiān)聽器類定義成一個外部類
3.Activity本身作為事件監(jiān)聽器類:讓Activity本身實現(xiàn)監(jiān)聽接口,并實現(xiàn)事件處理方法。
4.匿名內(nèi)部類:使用匿名內(nèi)部類創(chuàng)建事件監(jiān)聽對象
5.直接綁定到標簽:直接在界面布局文件中為指定標簽綁定事件處理方法。
Android的事件處理機制是一種委派式事件處理方式
二.基于回調(diào)的實踐處理
對于基于回調(diào)的事件處理模型來說,事件源與事件監(jiān)聽器是統(tǒng)一的,或者說事件監(jiān)聽器完全消失了。當用戶在GUI組件上激發(fā)某個事件時,組件自己特定的方法將會負責處理該事件。
View包含的事件處理的回調(diào)方法:
Boolean onKeyDown(int keyCode, KeyEvent event):當用戶在該組件上按下某個鍵是觸發(fā)。
Boolean onKeyLongPress(int keyCode, KeyEvent event):當用戶在該組件上長按某個鍵時觸發(fā)。
Boolean onKeyUp(int keyCode, KeyEvent event):當用戶在該組件上松開某個鍵時觸發(fā)。
Boolean onTouchEvent(MotionEvent event):當用戶在該組件上觸發(fā)觸摸屏幕事件時觸發(fā)。
Boolean onTrackballEvent(MotionEvent event):當用戶在該組件上觸發(fā)軌跡球屏事件時觸發(fā)。
基于回調(diào)的事件傳播:
如果處理事件的回調(diào)方法返回true,表明該處理方法已完全處理該事件,該事件不會傳播出去。
如果處理事件的回調(diào)方法返回false,表明該處理方法并未完全處理該事件,該事件會傳播出去。
基于回調(diào)的實踐處理機制可通過自定義View來實現(xiàn),自定義View時重寫該View的事件處理方法即可。