【Android應用開發技術:應用組件】Android事件處理機制

來源:互聯網
上載者:User

標籤:

郭孝星
微博:郭孝星的新浪微博
郵箱:[email protected]
部落格:http://blog.csdn.net/allenwells
Github:https://github.com/AllenWells

事件處理:不管是案頭應用還是手機應用都需要去響應使用者的動作,這種為使用者動作提供響應的機制就是事件處理。

Android提供了兩套事件處理機制,如下所示:

  • 基於監聽的事件處理
  • 基於回調的事件處理

一般來說,基於回調的事件處理可用於處理一些通用性的事件,但對於某些特定的事件只能使用基於監聽的事件處理。而且基於監聽的事件處理會被優先觸發。

下面我們來詳細介紹一些這兩種事件處理方式。

一 基於監聽的事件處理

基於監聽的事件處理是一種委派式的事件處理機制,普通組件(事件來源)將整個事件處理委託給特定的對象(事件監聽器),當該事件來源發生指定的事件時,就通知所委託的事件監聽器,由事件監聽器來處理這個事件。

1.1 基於監聽的事件處理模型

在基於監聽的事件處理模型包含以下3類對象:

  • 事件來源:即Event Source,事件發生的場所,通常就是各組件。
  • 事件:即Event,事件封裝了介面組件發生的特定事情,通常是一次使用者的相關操作,如果程式需要獲得介面組件上所放生事件的相關資訊,一般是通過Event對象來取得。
  • 事件監聽器:即Event Listener,負責監聽事件來源所發生的事件,並對各種事件作出響應。

基於監聽的事件處理模型如所示:

基於監聽的事件處理模型Visio源檔案下載

1.2 事件來源監聽器

基於監聽的事件處理編程步驟如下所示:

  1. 擷取普通介面組件(事件來源),即被監聽的對象。
  2. 實現事件監聽器類,該類實現一個XxxListener的介面。
  3. 呼叫事件源的setXxxListener方法將事件監聽器對象註冊給普通組件。

舉例

定義一個Button作為事件來源

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:gravity="center_horizontal"    ><EditText     android:id="@+id/show"    android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:editable="false"    /><Button     android:id="@+id/bn"    android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="單擊我"    /></LinearLayout>

實現監聽器監聽事件來源。

import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;// 實現事件監聽器介面public class ActivityListener extends Activity    implements OnClickListener{    EditText show;    Button bn;    @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        show = (EditText) findViewById(R.id.show);        bn = (Button) findViewById(R.id.bn);        // 直接使用Activity作為事件監聽器        bn.setOnClickListener(this);    }    // 實現事件處理方法    @Override    public void onClick(View v)    {        show.setText("bn按鈕被單擊了!");    }}

在在基於監聽的事件處理模型包含以下3類對象中,事件來源隨處可見,事件由Android系統產生,所以我們需要關注的主要還是實現事件監聽器,常見的事件監聽器有4種,如下所示:

  • 內部類形式:將事件監聽器定義成當前類的內部類。
  • 外部類形式:將事件監聽器定義成一個外部類。
  • Activity本身作為事件監聽器:讓Activity本身實現監聽器介面,並實現事件處理方法。
  • 匿名內部類形式:使用匿名內部類建立事件監聽器對象。
二 基於回調的事件處理

基於回調的事件處理沒有事件監聽器,當使用者在介面組件激發某個事件時,組件自己特定的方法將會負責處理該事件。

2.1 基於回調的事件傳播

幾乎所有基於回調的時間處理方法都有一個boolean類型的傳回值,該傳回值用於標識該處理方法是否能完全處理該事件。

  • 如果處理事件的回調方法返回true,表明該處理方法已能完全處理該事件,該事件不會傳播出去。
  • 如果處理事件的回調方法返回false,表明該處理方法並未能完全處理該事件,該事件會傳播出去。

  • -

著作權聲明:當我們認真的去做一件事的時候,就能發現其中的無窮樂趣,豐富多彩的技術宛如路上的風景,邊走邊欣賞。

【Android應用開發技術:應用組件】Android事件處理機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.