search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

Android事件處理概述

通過對Android基本組件的學習,也有接觸少部分Android的事件處理,比如按鈕的點擊事件、選框的狀態切換事件。

一、Android事件處理

Android提供了兩種方式的事件處理:基於回調的事件處理和基於監聽的事件處理。

  • 基於監聽的事件處理:主要做法就是為Android界面組件綁定特定的事件監聽器,前面小節已經見到大量這種事件處理的示例。

  • 基於回調的事件處理:主要做法就是重寫Android組件特定的回調方法, 或者重寫Activity的回調方法。Android為絕大部分界面組件都提供了事件響應的回調方法,開發者只要重寫它們即可。

一般來說,基於回調的事件處理可用於處理一些具有通用性的事件,基於回調的事件處理代碼會顯得比較簡潔。但對於某些特定的事件,無法使用基於回調的事件處理,只能採用基於監聽的事件處理。

本期先來學習基於監聽的事件處理,後面再學習基於回調的事件處理,關注分享達人秀(ShareExpert)獲取第一手教程,也可以加小編微信(jinwenyu2010)拽入Android零基礎入門技術討論微信群共同進步。

二、基於監聽的事件處理概述

基於監聽的事件處理是一種更「面向對象」的事件處理,在事件監聽的處理模型中主要涉及如下三類對象。

  • Event Source (事件源):事件發生的場所,通常就是各個組件,例如按鈕、窗口、菜單等。

  • Event (事件):事件封裝了界面組件上發生的特定事情(通常就是一次用戶操作)。如果程序需要獲得界面組件上所發生事件的相關信息,一般通過Event對象來取得。

  • Event Listener (事件監聽器):負責監聽事件源所發生的事件,並對各種事件做出相應的響應。

當用戶按下一個按鈕或者單擊某個菜單項時,這些動作就會激發一個相應的事件,該事件就會觸發事件源上註冊的事件監聽器(特殊的Java對象),事件監聽器調用對應的事件處理器 (事件監聽器里的實例方法)來做出相應的響應。

每個組件均可以針對特定的事件指定一個事件監聽器,每個事件監聽器也可監聽一個或多個事件源。因為同一個事件源上可能發生多種事件,委派式事件處理方式可以把事件源上所有可能發生的事件分別授權給不同的事件監聽器來處理;同時也可以讓一類事件都使用同一個事件監聽器來處理。

Android事件處理流程如下圖所示:

從上圖可以知道,基於監聽的事件處理模型的流程如下:

  • 為某個事件源(界面組件)設置一個監聽器,用於監聽用戶操作。

  • 當用戶操作時,會觸發事件源的監聽器。

  • 生成了對應的事件對象。

  • 將這個事件源對象作為參數傳給事件監聽器。

  • 事件監聽器對事件對象進行判斷,執行對應的事件處理器(對應事件的處理方法)。

Android中基於監聽的事件處理模型的開發步驟如下。

  • 獲取普通界面組件(事件源),也就是被監聽的對象。

  • 實現事件監聽器類,該監聽器類是一個特殊的Java類,必須實現一個XxxListener介面。

  • 調用事件源的setXxxListener方法將事件監聽器對象註冊給普通組件(事件源)。

對於這三件事情,事件源可以是任何界面組件,不太需要開發者參與;註冊監聽器也只要一行代碼即可,因此事件編程的關鍵就是實現事件監聽器類。

在基於監聽的事件處理模型中,事件監聽器必須實現事件監聽器介面,Android為不同的界面組件提供了不同的監聽器介面,這些介面通常以內部類的形式存在。以View類為例,它包含了如下幾個內部介面。

  • View.OnClickListener:單擊事件的事件監聽器必須實現的介面。

  • View.OnCreateContextMenu Listener :創建上下文菜單事件的事件監聽器必須實現的介面。

  • View.onFocusChangeListener:焦點改變事件的事件監聽器必須實現的介面。

  • View.OnKeyListener:按鍵事件的事件監聽器必須實現的介面。

  • View.OnLongClickListener:長按事件的事件監聽器必須實現的介面。

  • View.OnTouchListener:觸摸事件的事件監聽器必須實現的介面。

通過前面的學習,知道事件監聽器就是實現了特定介面的Java類的實例。在程序中實現事件監聽器,通常有如下幾種形式。

  • 匿名內部類形式:使用匿名內部類創建事件監聽器對象。

  • 內部類形式:將事件監聽器類定義成當前類的內部類。

  • 外部類形式:將事件監聽器類定義成一個外部類。

  • Activity本身作為事件監聽器類:讓Activity本身實現監聽器介面,並實現事件處理方法。

  • 直接綁定到標籤形式:直接在xml布局文件對應的Activity中定義一個事件處理方法,然後在布局文件中引用要觸發的事件。

三、使用匿名內部類作為事件監聽器

大部分時候,事件處理器都沒有什麼復用價值(可復用代碼通常都被抽象成了業務邏輯方法),因此大部分事件監聽器只是臨時使用一次,所以使用匿名內部類形式的事件監聽器更合適。實際上,這種形式是目前使用最廣泛的事件監聽器形式,在前面的基本組件學習中也是使用的該種方法來綁定監聽器。

接下來通過一個簡單的示常式序來學習Android使用匿名內部類作為事件監聽器。

同樣使用WidgetSample工程,繼續使用app/main/res/layout/目錄下的activity_main.xml文件,在其中填充如下代碼片段:

為了監聽按鈕的點擊事件,在Java代碼中為其添加點擊事件監聽器,具體代碼如下:

上面程序中的粗體字部分使用匿名內部類創建了一個事件監聽器對象,「new監聽器介面」或「new事件適配器」的形式就是用於創建匿名內部類形式的事件監聽器。

運行程序,點擊按鈕,可以看到下圖所示界面效果。

對於使用匿名內部類作為事件監聽器類的形式來說,唯一的缺點就是匿名內部類的語法有點不易掌握,如果Java基礎紮實,匿名內部類的語法掌握較好,通常建議使用匿名內部類作為監聽器類。

Android中基於監聽的事件處理的其他四種形式下期再繼續學習。

今天就先到這裡,如果有問題歡迎留言一起探討,也歡迎加入Android零基礎入門技術討論微信群,共同成長!

此文章版權為微信公眾號分享達人秀——鑫鱻所有,若需轉載請聯繫作者授權,特此聲明!

往期總結分享:

第1節:Android的前世今生

第2節:Android 系統架構和應用組件那些事

第3節:帶你一起來聊一聊Android開發環境

第4節:正確安裝和配置JDK

第5節:善用ADT Bundle

第6節:配置優化SDK Manager

第7節:搞定Android模擬器

第8節:HelloWorld,第一趟旅程出發點

第9節:Android實戰,不懂代碼也可以開發

第10節:開發IDE迎來Android Studio

第11節:運行Android Studio工程

第12節:熟悉Android Studio界面

第13節:Android Studio配置優化

第14節:使用高速Genymotion

第15節:掌握Android Studio項目結構

第16節:Android用戶界面開發概述

第17節:TextView屬性和方法大全

第18節:EditText的屬性和使用方法

第19節:Button使用詳解

第20節:CheckBox和RadioButton使用大全

第21節:ToggleButton和Switch使用大全

第22節:ImageView的屬性和方法大全

第23節:ImageButton和ZoomButton使用

第24節:自定義View簡單使用

第25節:簡單且最常用的LinearLayout

第26節:layout_gravity和gravity大不同

第27節:正確使用padding和margin

第28節:輕鬆掌握RelativeLayout相對布局

第29節:善用TableLayout表格布局

第30節:兩分鐘掌握FrameLayout幀布局

第31節:少用的AbsoluteLayout絕對布局

第32節:新推出的GridLayout網格布局



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦