歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android事件處理的兩種模型

UI編程通常都會伴隨事件處理,Android也不例外,它提供了兩種方式的事件處理:基於回調的事件處理和基於監聽器的事件處理。

對於基於監聽器的事件處理而言,主要就是為Android界面組件綁定特定的事件監聽器;對於基於回調的事件處理而言,主要做法是重寫Android組件特定的回調函數,Android大部分界面組件都提供了事件響應的回調函數,我們主要重寫它們就行。

一 基於監聽器的事件處理

相比於基於回調的事件處理,這是更具“面向對象”性質的事件處理方式。在監聽器模型中,主要涉及三類對象:

1)事件源Event Source:產生事件的來源,通常是各種組件,如按鈕,窗口等。

2)事件Event:事件封裝了界面組件上發生的特定事件的具體信息,如果監聽器需要獲取界面組件上所發生事件的相關信息,一般通過事件Event對象來傳遞。

3)事件監聽器Event Listener:負責監聽事件源發生的事件,並對不同的事件做相應的處理。

基於監聽器的事件處理機制是一種委派式Delegation的事件處理方式,事件源將整個事件委托給事件監聽器,由監聽器對事件進行響應處理。這種處理方式將事件源和事件監聽器分離,有利於提供程序的可維護性。

舉例:

View類中的OnLongClickListener監聽器定義如下:(不需要傳遞事件)

  1. public interface OnLongClickListener {  
  2.     boolean onLongClick(View v);  
  3. }  

View類中的OnLongClickListener監聽器定義如下:(需要傳遞事件MotionEvent)

  1. public interface OnTouchListener {  
  2.     boolean onTouch(View v, MotionEvent event);  
  3. }  

二 基於回調的事件處理

相比基於監聽器的事件處理模型,基於回調的事件處理模型要簡單些,該模型中,事件源和事件監聽器是合一的,也就是說沒有獨立的事件監聽器存在。當用戶在GUI組件上觸發某事件時,由該組件自身特定的函數負責處理該事件。通常通過重寫Override組件類的事件處理函數實現事件的處理。

舉例:

View類實現了KeyEvent.Callback接口中的一系列回調函數,因此,基於回調的事件處理機制通過自定義View來實現,自定義View時重寫這些事件處理方法即可。

  1. public interface Callback {  
  2.     // 幾乎所有基於回調的事件處理函數都會返回一個boolean類型值,該返回值用於   
  3.     // 標識該處理函數是否能完全處理該事件   
  4. // 返回true,表明該函數已完全處理該事件,該事件不會傳播出去   
  5. // 返回false,表明該函數未完全處理該事件,該事件會傳播出去   
  6.        boolean onKeyDown(int keyCode, KeyEvent event);  
  7.        boolean onKeyLongPress(int keyCode, KeyEvent event);  
  8.        boolean onKeyUp(int keyCode, KeyEvent event);  
  9.        boolean onKeyMultiple(int keyCode, int count, KeyEvent event);  
  10. }  
Copyright © Linux教程網 All Rights Reserved