天天看點

Android學習曆程9-Android事件處理

  與界面變成緊密相關的隻是就是事件處理了,當使用者在程式界面上執行各種操作時,應用程式必須為使用者動作提供相應動作,這種相應動作就需要通過事件處理來完成。

  Android 提供了兩種方式的事件處理:基于回調的時間處理和基于監聽器的時間處理。Android 系統充分利用了兩種事件處理方式的優點,允許開發者采用自己熟悉的事件處理方式來為使用者操作提供相應動作。

Android 兩種事件處理機制詳細介紹

Android提供了強大的事件處理機制,它包括兩套處理機制:

  1.基于監聽的事件處理

  2.基于回調的事件處理

對于Android基于監聽的事件處理,主要的做法是為Android界面元件綁定特定的事件監聽器。

對于Android基于回調的事件處理,主要的方法是重寫Android元件特定的回調方法或者重寫Activity的回調方法

基于監聽的事件處理

在事件監聽的處理模型中,主要涉及如下三類對象:

  

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

2.Event(事件):事件封裝了界面元件上發生的特定事情(通常就是一次使用者操作)。

3.Event Listener(事件監聽器):扶着監聽事件源所發生的事件,并對各種事件做出相應的響應。

事件處理流程示意圖如下:

       

Android學習曆程9-Android事件處理

基于回調事件處理

  從代碼的實作的角度來看,基于回調的事件處理模型更加簡單。如果說事件監聽制是一種委托式的事件處理,那麼回調機制恰好與之相反:對于基于回調機制的事件處理模型來說,事件源與事件監聽器是統一的。為了使用回調機制類處理GUI元件上所發生的事件,我們需要為該元件提供對應的事件處理方法–而Java又是一種靜态語言,我們無法為某個對象動态的添加方法,是以隻能繼承GUI元件類,并重寫該元件類的事件處理方法來實作。

具體代碼展示如下

MainActivity 中的代碼:

package com.example.eventhandle;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

private Button btn_event;
private Button btn_event1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn_event = (Button)findViewById(R.id.btn_event);
    btn_event.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(MainActivity.this, "這是回調的事件處理", Toast.LENGTH_SHORT).show();
        }
    });
    btn_event1 = (Button)findViewById(R.id.btn_event1);
    btn_event1.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.btn_event1:
        Toast.makeText(MainActivity.this, "這是監聽的事件處理", Toast.LENGTH_SHORT).show();
        break;

    default:
        break;
    }
}
}
           

activity_main中的代碼:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
    android:id="@+id/btn_event"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

<Button
    android:id="@+id/btn_event1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world1" />

</LinearLayout>