天天看點

【Android-基礎】事件處理方式,Android的監聽以及Android的回調【Android-基礎】前言一、基于監聽的二、基于回調的總結

【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元件的事件處理,就用基于監聽的。