基於監聽的事件處理機制
本節引言:
第二章我們學習的是Android的UI控件,我們可以利用這些控件構成一個精美的介面,但是僅僅是介面而已;下一步就要開始學習邏輯與業務實現了,本章節講解的是Android的事件處理機制!何為事件處理機制?舉個 簡單的例子,例如點擊一個按鈕,我們向伺服器發送登陸請求!當然,Android中的事件處理機制不只這一種, 例如螢幕發生選擇,我們點擊了螢幕上某個區域...簡單點說,事件處理機制就是我們和UI發生互動時,我們在背後加入一些小動作而已!本節我們來介紹使用的最頻繁的一種:基於監聽的事件處理機制!
1.基於監聽的時間處理機制模型:
#流程模型圖:
文字表述:
事件監聽機制中由事件來源,事件,事件監聽器三類物件組成 處理流程如下:Step 1:為某個事件來源(元件)設定一個監聽器,用於監聽使用者操作Step 2:使用者的操作,觸發了事件來源的監聽器Step 3:產生了對應的事件物件Step 4:將這個事件來源物件作為參數傳給事件監聽器step 5:事件監聽器對事件物件進行判斷,執行對應的事件處理器(對應事件的處理方法)
歸納:
事件監聽機制是一種委派式的事件處理機制,事件來源(元件)事件處理委託給事件監聽器 當事件來源發生指定事件時,就通知指定事件監聽器,執行對應的操作
#2.五種不同的使用形式:
我們以下面這個:簡單的按鈕點擊,提示Toast訊息的程式;使用五種不同的形式來實現!
效果圖:
#1)直接用匿名內部類別
平常最常使用的一種:直接setXxxListener後,重寫裡面的方法即可; 通常是臨時使用一次,復用性不高!
實作程式碼如下:MainAcivity.java:
#import android.os.Bundle;
導入 android.view.View;
導入android.view.View.OnClickListener;
導入 android.widget.Button;
導入android.widget.Toast;
導入android.app.Activity;
#
public 類 MainActivity 擴充 Activity {
private Button btnshow;
@Override
protected void onCreate(Bundle anceState);
setContentView(R.layout.activity_main);
btnshow = (按鈕) findViewById(R.id.btnshow);
btnshow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) { 資訊
Toast.makeText(getApplicationContext(), "你點選了按鈕", }
});
}
}
2)使用內部類別
和上面的匿名內部類別不同哦! 使用優點:可以在該類別中進行複用,可直接存取外部類別的所有介面元件!
實作程式碼如下:MainAcivity.java:
#import android. os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button android.app.Activity;
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
# sup (savedInstanceState);
setContentView(R.layout.activity_main);
//直接new一個內部類別物件作為參數
btnshow .setOnClickListener(new BtnClickListener());
}
# //定義一個內部類別,實作 View.OnClickListener
{
@Override
public void onClick(View v) { "按鈕被點選了", Toast.LENGTH_SHORT).show();
}
}
}
3)使用外部類別:
就是另外創建一個處理事件的Java檔案,這種形式用的比較少!因為外部類別不能直接存取使用者介面 類別中的元件,要透過構造方法將元件傳入使用;這樣導致的結果就是程式碼不夠簡潔!
ps:為了示範傳參,這裡用TextView取代Toast提示!
實作程式碼如下:MyClick.java:
#import android.view.View;
#import android.view.View.OnClickListener;
import android.widget.TextView
private TextView textshow ;
//使用文字方塊當參數傳入
public MyClick(TextView txt) ##
}
@Override
public void onClick(View v) {
//點選後設定文字方塊中顯示的文字
textshow.setText
MainActivity.java
導入android.os.Bundle;
導入android.widget.Button;
導入android.widget.TextView;
導入android.app.Activity;
#
public 類 MainActivity 擴充 Activity {
private Button btnshow;
私有 TextView txtshow;
@Override
# protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
btnshow = (按鈕) findViewById(R.id.btnshow);
txtshow = (TextView) findViewById(R.id.textshow);
//直接new一個外部類,並將TextView作為參數建立
btnshow.setOnClickListener(new MyClick(txtshow));
}
}
4)直接使用Activity作為事件監聽器
只需要讓Activity類別實作XxxListener事件監聽介面,在Activity中定義重寫對應的事件處理器方法 eg:Actitity實作了OnClickListener介面,重寫了onClick(view)方法在為某些組成添加該事件監聽對象 時,直接setXxx.Listener(this)即可
實作程式碼如下:MainAcivity.java:
#import android.os.Bundle;
import android.view.View;
import android.view.View. widget.Toast;
import android.app.Activity;
//讓Activity方法實作OnClickListener介面 private Button btnshow;
@ Override
protected void onCreate(Bundle savedInstanceState) {
View(R.layout.activity_main);
btnshow (Button) btnshow (Button) btnshow .btnshow);
//直接寫個this
b}show重寫介面中的抽象方法
@Override
public void onClick (View v) {
Toast.makeText(getApplicationContext(), "點擊了按鈕", Toast.LENGTH_SHO );
}
#
5)直接綁定到標籤:
就是直接在xml佈局檔中對應得Activity中定義一個事件處理方法 eg:public void myClick(View source) source對應事件來源(元件) 接著佈局檔中對應要觸發事件的組成,設定一個屬性:onclick = "myclick"即可
實作程式碼如下:MainAcivity.java:
import android.app.Activity;
import android.os. android.widget.Toast;
public class MainActivity extends Activity {
{
super.onCreate(savedInstanceState);
# setContentView(R .layout.activity_main);
卷
Toast.makeText(getApplicationContext( ), "按鈕被點擊了", Toast.LENGTH_SHORT).show();
}
}
#
main.xml佈局檔:
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1" :layout_height=" match_parent"
android:orientation="vertical" >
android;Button android:layout_height="wrap_content"
android:text="按鈕"
and?了Android中的事件處理機制,例子中的是onClickListener點擊事件,當然除了這個以外還有其他的事件,例如onItemClickListener,凡是需要透過setXxxListener這些,基本上都是基於事件監聽的! 另外這五種方式用的比較多的是:1,2,3,5幾種,看具體情況而定~