【Android-基礎】
點選進入【Android-基礎】的目錄,獲得更多學習資源
文章目錄
- 【Android-基礎】
- 前言
- 一、基于監聽的
- 二、基于回調的
- 總結
前言
在Android開發中,不可避免的要涉及到
互動
,可能是人機之間的互動,也可能是元件之間的互動。總之,一個app不可能是一成不變的,隻要有變化,就需要用觸發這個變化的條件以及變化的效果,這個就是
事件
存在意義。
或者可以說,
事件就是為了解決互動這一問題而産生的
。
android中的事件處理有兩種:
基于監聽的、基于回調的。
一、基于監聽的
為UI元件綁定事件監聽器:
事件監聽器綁定到事件源(UI元件)–>外部動作–>事件源(UI元件)–>事件–>事件監聽器處理
根據上面的流程,可以分離出三個對象:
事件監聽器、事件源、事件。
說這麼多理論沒有意義,直接舉個例子就懂了。
關于“基于監聽的”最簡單的例子就是:
按鈕的點選事件監聽
事件監聽器就是你的
Listener
,事件源就是你的
UI元件:按鈕
,事件就是
點選
。這樣是不是就能很清晰的了解“基于監聽的”事件處理機制了。
二、基于回調的
方式就是重寫(比如重寫android元件的回調方法):
下面舉例重寫activity的回調方法
舉例:
public class TestActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
System.out.println("按下了按鍵");
return super.onKeyDown(keyCode, event);
}
}
代碼的簡單解釋:
利用回調監聽實體按鍵的時候,android為每一個按鍵都定義了一個int常量,隻需判斷其
KeyCode是不是等于按鍵對應的常量即可。
比如“傳回鍵”的常量是:KEYCODE_BACK
在activity的onKeyDown回調方法中,通過if判斷其參數keyCode==KEYCODE_BACK就知道
目前是否按下的是“傳回鍵”
一個不怎麼引人注意的點
:
不知你是否注意到onKeyDown這個方法傳回的是一個Boolean值。
正常情況下,當你點選螢幕會觸發兩個監聽:觸摸監聽和點選監聽。
但是觸摸監聽的事件處理方法是有一個布爾類型的傳回值的,這個傳回值的意義就是:
是否完全消耗這個互動
當傳回的是true的時候,代表觸摸這個動作已經完全消耗這個互動了,是以點選這個動作
就不會被觸發,就不會再去執行點選監聽。
當傳回的是false,還會繼續去執行點選的監聽。
這個值得留意,因為曾經因為不知道這個,寫了一堆廢代碼,算是一個坑吧,這裡貼出來,也算是一個總結。
總結
這兩種事件的處理機制,究竟如何選用,主要還是看具體的業務,比如,就是一個簡單的按鈕被點選,被長按等等這種事件,用“基于監聽的”機制是比較容易的。
但是如果是
程式運作中觸發了某些條件
,比如業務中某個類被加載了,我需要在加載這個類之後,做一些事情,這時候就可以使用
“基于回調的”機制。
概括來說:
基于回調的方式,用來處理一些通用的事件;
特定的某些情況下,比如某些UI元件的事件處理,就用基于監聽的。