自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android事件偵聽器回調(diào)方法淺談

移動(dòng)開發(fā) Android
Android事件偵聽器作為視圖View類的接口,其中包含有不少回調(diào)方法,比如:onClick();onLongClick();onFocusChange();onKey();onTouch();onCreateContextMenu()等等。

Android操作系統(tǒng)中,對于事件的處理是一個(gè)非常基礎(chǔ)而且重要的操作。許多功能的實(shí)現(xiàn)都需要對相關(guān)事件進(jìn)行觸發(fā)才能達(dá)到自己的目的。比如Android事件偵聽器是視圖View類的接口,包含一個(gè)單獨(dú)的回調(diào)方法。這些方法將在視圖中注冊的偵聽器被用戶界面操作觸發(fā)時(shí)由Android框架調(diào)用。下面這些回調(diào)方法被包含在Android事件偵聽器接口中:#t#

onClick() 

包含于View.OnClickListener。當(dāng)用戶觸摸這個(gè)item(在觸摸模式下),或者通過瀏覽鍵或跟蹤球聚焦在這個(gè)item上,然后按下“確認(rèn)”鍵或者按下跟蹤球時(shí)被調(diào)用。

onLongClick() 

包含于View.OnLongClickListener。當(dāng)用戶觸摸并控制住這個(gè)item(在觸摸模式下),或者通過瀏覽鍵或跟蹤球聚焦在這個(gè)item上,然后保持按下“確認(rèn)”鍵或者按下跟蹤球(一秒鐘)時(shí)被調(diào)用。

onFocusChange() 

包含于View.OnFocusChangeListener。當(dāng)用戶使用瀏覽鍵或跟蹤球?yàn)g覽進(jìn)入或離開這個(gè)item時(shí)被調(diào)用。

onKey() 

包含于View.OnKeyListener。當(dāng)用戶聚焦在這個(gè)item上并按下或釋放設(shè)備上的一個(gè)按鍵時(shí)被調(diào)用。

onTouch() 

包含于View.OnTouchListener。當(dāng)用戶執(zhí)行的動(dòng)作被當(dāng)做一個(gè)觸摸事件時(shí)被調(diào)用,包括按下,釋放,或者屏幕上任何的移動(dòng)手勢(在這個(gè)item的邊界內(nèi))。

onCreateContextMenu() 

包含于View.OnCreateContextMenuListener。當(dāng)正在創(chuàng)建一個(gè)上下文菜單的時(shí)候被調(diào)用(作為持續(xù)的“長點(diǎn)擊”動(dòng)作的結(jié)果)。參閱創(chuàng)建菜單Creating Menus章節(jié)以獲取更多信息。

這些方法是它們相應(yīng)接口的唯一“住戶”。要定義這些方法并處理你的事件,在你的活動(dòng)中實(shí)現(xiàn)這個(gè)嵌套接口或定義它為一個(gè)匿名類。然后,傳遞你的實(shí)現(xiàn)的一個(gè)實(shí)例給各自的View.set...Listener() 方法。(比如,調(diào)用setOnClickListener()并傳遞給它你的OnClickListener實(shí)現(xiàn)。)

下面的例子說明了如何為一個(gè)按鈕注冊一個(gè)點(diǎn)擊偵聽器:

 

  1. // Create an anonymous implementation of OnClickListener  
  2. private OnClickListener mCorkyListener = new OnClickListener() {  
  3. public void onClick(View v) {  
  4. // do something when the button is clicked  
  5. }  
  6. };  
  7. protected void onCreate(Bundle savedValues) {  
  8. ...  
  9. // Capture our button from layout  
  10. Button button = (Button)findViewById(R.id.corky);  
  11. // Register the onClick listener with the implementation above  
  12. button.setOnClickListener(mCorkyListener);  
  13. ...  

 

你可能會(huì)發(fā)現(xiàn)把OnClickListener作為活動(dòng)的一部分來實(shí)現(xiàn)會(huì)便利的多。這將避免額外的類加載和對象分配。比如:

 

  1. public class ExampleActivity extends Activity implements OnClickListener {  
  2. protected void onCreate(Bundle savedValues) {  
  3. ...  
  4. Button button = (Button)findViewById(R.id.corky);  
  5. button.setOnClickListener(this);  
  6. }  
  7. // Implement the OnClickListener callback  
  8. public void onClick(View v) {  
  9. // do something when the button is clicked  
  10. }  
  11. ...  

 

注意上面例子中的onClick()回調(diào)沒有返回值,但是一些其它Android事件偵聽器必須返回一個(gè)布爾值。原因和事件相關(guān)。對于其中一些,原因如下:

· onLongClick() – 返回一個(gè)布爾值來指示你是否已經(jīng)消費(fèi)了這個(gè)事件而不應(yīng)該再進(jìn)一步處理它。也就是說,返回true 表示你已經(jīng)處理了這個(gè)事件而且到此為止;返回false 表示你還沒有處理它和/或這個(gè)事件應(yīng)該繼續(xù)交給其他on-click偵聽器。

· onKey() –返回一個(gè)布爾值來指示你是否已經(jīng)消費(fèi)了這個(gè)事件而不應(yīng)該再進(jìn)一步處理它。也就是說,返回true 表示你已經(jīng)處理了這個(gè)事件而且到此為止;返回false 表示你還沒有處理它和/或這個(gè)事件應(yīng)該繼續(xù)交給其他on-key偵聽器。

· onTouch() - 返回一個(gè)布爾值來指示你的偵聽器是否已經(jīng)消費(fèi)了這個(gè)事件。重要的是這個(gè)事件可以有多個(gè)彼此跟隨的動(dòng)作。因此,如果當(dāng)接收到向下動(dòng)作事件時(shí)你返回false,那表明你還沒有消費(fèi)這個(gè)事件而且對后續(xù)動(dòng)作也不感興趣。那么,你將不會(huì)被該事件中的其他動(dòng)作調(diào)用,比如手勢或最后出現(xiàn)向上動(dòng)作事件。

記住按鍵事件總是遞交給當(dāng)前焦點(diǎn)所在的視圖。它們從視圖層次的頂層開始被分發(fā),然后依次向下,直到到達(dá)恰當(dāng)?shù)哪繕?biāo)。如果你的視圖(或者一個(gè)子視圖)當(dāng)前擁有焦點(diǎn),那么你可以看到事件經(jīng)由dispatchKeyEvent()方法分發(fā)。除了從你的視圖截獲按鍵事件,還有一個(gè)可選方案,你還可以在你的活動(dòng)中使用onKeyDown() and onKeyUp()來接收所有的事件。

注意: Android 將首先調(diào)用事件處理器,其次是類定義中合適的缺省處理器。這樣,從這些事情偵聽器中返回true 將停止事件向其它Android事件偵聽器傳播并且也會(huì)阻塞視圖中的缺事件處理器的回調(diào)函數(shù)。因此當(dāng)你返回true時(shí)確認(rèn)你希望終止這個(gè)事件。

責(zé)任編輯:曹凱 來源: CSDN
相關(guān)推薦

2010-05-26 16:50:46

IPv6多播偵聽器

2022-09-19 18:49:01

偵聽器異步組件

2022-08-01 08:00:00

開發(fā)工具跟蹤偵聽器

2009-08-27 11:02:22

JavaScript事

2009-11-09 15:58:07

WCF回調(diào)方法

2023-11-11 19:07:23

JVMJava

2011-07-05 10:27:26

JAVA閉包

2019-01-09 13:07:26

Tomcat服務(wù)器優(yōu)化

2020-11-30 11:40:35

NginxLinux性能調(diào)優(yōu)

2009-06-11 09:04:00

2011-05-16 10:14:11

Hibernate

2009-10-19 16:01:24

服務(wù)臺(tái)事件管理

2012-01-04 10:07:56

Delphi

2012-02-01 10:33:59

Java

2009-08-21 17:02:20

ASP.NET異步回調(diào)

2009-12-22 19:00:08

WCF回調(diào)

2009-08-12 10:11:18

C# 回調(diào)函數(shù)

2023-11-10 16:31:31

2015-10-26 09:25:42

2009-08-19 16:40:35

C#回調(diào)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)