在Android上,不止一個途徑來偵聽用戶和應用程序之間交互的事件。對于用戶界面里的事件,偵聽方法就是從與用戶交互的特定視圖對象截獲這些事件。視圖類提供了相應的手段。
在各種用來組建布局的視圖類里面,你可能會注意到一些公共的回調方法看起來對用戶界面事件有用。這些方法在該對象的相關動作發生時被Android框架調用。比如,當一個視圖(如一個按鈕)被觸摸時,該對象上的onTouchEvent()方法會被調用。不過,為了偵聽這個事件,你必須擴展這個類并重寫該方法。很明顯,擴展每個你想使用的視圖對象(只是處理一個事件)是荒唐的。這就是為什么視圖類也包含了一個嵌套接口的集合,這些接口含有實現起來簡單得多的回調函數。這些接口叫做事件偵聽器event listeners,是用來截獲用戶和你的界面交互動作的"門票"。
當你更為普遍的使用事件偵聽器來偵聽用戶動作時,總有那么一次你可能得為了創建一個自定義組件而擴展一個視圖類。也許你想擴展按鈕Button類來使某些事更花哨。在這種情況下,你將能夠使事件處理器event handlers類來為你的類定義缺省事件行為。
事件偵聽器Event Listeners
事件偵聽器是視圖View類的接口,包含一個單獨的回調方法。這些方法將在視圖中注冊的偵聽器被用戶界面操作觸發時由Android框架調用。下面這些回調方法被包含在事件偵聽器接口中:
onClick():包含于View.OnClickListener。當用戶觸摸這個item(在觸摸模式下),或者通過瀏覽鍵或跟蹤球聚焦在這個item上,然后按下"確認"鍵或者按下跟蹤球時被調用。
onLongClick():包含于View.OnLongClickListener。當用戶觸摸并控制住這個item(在觸摸模式下),或者通過瀏覽鍵或跟蹤球聚焦在這個item上,然后保持按下"確認"鍵或者按下跟蹤球(一秒鐘)時被調用。
onFocusChange():包含于View.OnFocusChangeListener。當用戶使用瀏覽鍵或跟蹤球瀏覽進入或離開這個item時被調用。
onKey():包含于View.OnKeyListener。當用戶聚焦在這個item上并按下或釋放設備上的一個按鍵時被調用。
onTouch():包含于View.OnTouchListener。當用戶執行的動作被當做一個觸摸事件時被調用,包括按下,釋放,或者屏幕上任何的移動手勢(在這個item的邊界內)。
onCreateContextMenu():包含于View.OnCreateContextMenuListener。當正在創建一個上下文菜單的時候被調用(作為持續的"長點擊"動作的結果)。
這些方法是它們相應接口的唯一"住戶"。要定義這些方法并處理你的事件,在你的活動中實現這個嵌套接口或定義它為一個匿名類。然后,傳遞你的實現的一個實例給各自的View.set...Listener() 方法。(比如,調用setOnClickListener()并傳遞給它你的OnClickListener實現。)
下面的例子說明了如何為一個按鈕注冊一個點擊偵聽器:
// Create an anonymous implementation of OnClickListenerprivate 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); ...}
你可能會發現把OnClickListener作為活動的一部分來實現會便利的多。這將避免額外的類加載和對象分配。比如:
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()回調沒有返回值,但是一些其它事件偵聽器必須返回一個布爾值。原因和事件相關。對于其中一些,原因如下:
onLongClick() 主站蜘蛛池模板: 晋中市| 铜山县| 昌乐县| 南部县| 夹江县| 余江县| 香格里拉县| 略阳县| 克什克腾旗| 镇安县| 五原县| 天长市| 怀远县| 黄骅市| 翁源县| 宁南县| 武威市| 马鞍山市| 陕西省| 和平县| 临沧市| 义乌市| 洪洞县| 灌阳县| 西乌| 黑水县| 阿勒泰市| 盱眙县| 台山市| 株洲县| 乐亭县| 宁海县| 温州市| 岐山县| 崇仁县| 行唐县| 高唐县| 天柱县| 肃宁县| 土默特右旗| 浦县|