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

成都創(chuàng)新互聯(lián)于2013年成立,先為曲周等服務(wù)建站,曲周等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為曲周企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
onClick()
包含于View.OnClickListener。當(dāng)用戶觸摸這個item(在觸摸模式下),或者通過瀏覽鍵或跟蹤球聚焦在這個item上,然后按下“確認(rèn)”鍵或者按下跟蹤球時被調(diào)用。
onLongClick()
包含于View.OnLongClickListener。當(dāng)用戶觸摸并控制住這個item(在觸摸模式下),或者通過瀏覽鍵或跟蹤球聚焦在這個item上,然后保持按下“確認(rèn)”鍵或者按下跟蹤球(一秒鐘)時被調(diào)用。
onFocusChange()
包含于View.OnFocusChangeListener。當(dāng)用戶使用瀏覽鍵或跟蹤球瀏覽進入或離開這個item時被調(diào)用。
onKey()
包含于View.OnKeyListener。當(dāng)用戶聚焦在這個item上并按下或釋放設(shè)備上的一個按鍵時被調(diào)用。
onTouch()
包含于View.OnTouchListener。當(dāng)用戶執(zhí)行的動作被當(dāng)做一個觸摸事件時被調(diào)用,包括按下,釋放,或者屏幕上任何的移動手勢(在這個item的邊界內(nèi))。
onCreateContextMenu()
包含于View.OnCreateContextMenuListener。當(dāng)正在創(chuàng)建一個上下文菜單的時候被調(diào)用(作為持續(xù)的“長點擊”動作的結(jié)果)。參閱創(chuàng)建菜單Creating Menus章節(jié)以獲取更多信息。
這些方法是它們相應(yīng)接口的唯一“住戶”。要定義這些方法并處理你的事件,在你的活動中實現(xiàn)這個嵌套接口或定義它為一個匿名類。然后,傳遞你的實現(xiàn)的一個實例給各自的View.set...Listener() 方法。(比如,調(diào)用setOnClickListener()并傳遞給它你的OnClickListener實現(xiàn)。)
下面的例子說明了如何為一個按鈕注冊一個點擊偵聽器:
- // Create an anonymous implementation of OnClickListener
- private OnClickListener mCorkyListener = new OnClickListener() {
- public void onClick(View v) {
- // do something when the button is clicked
- }
- };
- protected void onCreate(Bundle savedValues) {
- ...
- // Capture our button from layout
- Button button = (Button)findViewById(R.id.corky);
- // Register the onClick listener with the implementation above
- button.setOnClickListener(mCorkyListener);
- ...
- }
你可能會發(fā)現(xiàn)把OnClickListener作為活動的一部分來實現(xiàn)會便利的多。這將避免額外的類加載和對象分配。比如:
- public class ExampleActivity extends Activity implements OnClickListener {
- protected void onCreate(Bundle savedValues) {
- ...
- Button button = (Button)findViewById(R.id.corky);
- button.setOnClickListener(this);
- }
- // Implement the OnClickListener callback
- public void onClick(View v) {
- // do something when the button is clicked
- }
- ...
- }
注意上面例子中的onClick()回調(diào)沒有返回值,但是一些其它Android事件偵聽器必須返回一個布爾值。原因和事件相關(guān)。對于其中一些,原因如下:
· onLongClick() – 返回一個布爾值來指示你是否已經(jīng)消費了這個事件而不應(yīng)該再進一步處理它。也就是說,返回true 表示你已經(jīng)處理了這個事件而且到此為止;返回false 表示你還沒有處理它和/或這個事件應(yīng)該繼續(xù)交給其他on-click偵聽器。
· onKey() –返回一個布爾值來指示你是否已經(jīng)消費了這個事件而不應(yīng)該再進一步處理它。也就是說,返回true 表示你已經(jīng)處理了這個事件而且到此為止;返回false 表示你還沒有處理它和/或這個事件應(yīng)該繼續(xù)交給其他on-key偵聽器。
· onTouch() - 返回一個布爾值來指示你的偵聽器是否已經(jīng)消費了這個事件。重要的是這個事件可以有多個彼此跟隨的動作。因此,如果當(dāng)接收到向下動作事件時你返回false,那表明你還沒有消費這個事件而且對后續(xù)動作也不感興趣。那么,你將不會被該事件中的其他動作調(diào)用,比如手勢或最后出現(xiàn)向上動作事件。
記住按鍵事件總是遞交給當(dāng)前焦點所在的視圖。它們從視圖層次的頂層開始被分發(fā),然后依次向下,直到到達(dá)恰當(dāng)?shù)哪繕?biāo)。如果你的視圖(或者一個子視圖)當(dāng)前擁有焦點,那么你可以看到事件經(jīng)由dispatchKeyEvent()方法分發(fā)。除了從你的視圖截獲按鍵事件,還有一個可選方案,你還可以在你的活動中使用onKeyDown() and onKeyUp()來接收所有的事件。
注意: Android 將首先調(diào)用事件處理器,其次是類定義中合適的缺省處理器。這樣,從這些事情偵聽器中返回true 將停止事件向其它Android事件偵聽器傳播并且也會阻塞視圖中的缺事件處理器的回調(diào)函數(shù)。因此當(dāng)你返回true時確認(rèn)你希望終止這個事件。
分享文章:Android事件偵聽器回調(diào)方法淺談
標(biāo)題來源:http://www.dlmjj.cn/article/dpgssso.html


咨詢
建站咨詢
