1. 程式人生 > >事件處理之二:點選事件監聽器的五種寫法

事件處理之二:點選事件監聽器的五種寫法

首選方法二!

方法一:寫一個內部類,在類中實現點選事件

1、在父類中呼叫點選事件

bt_dail.setOnClickListener(new MyButtonListener());

2、建立內部類
private class MyButtonListener implements OnClickListener{
    	/**
    	 * 當按鈕被點選的時候呼叫
    	 */
		@Override
		public void onClick(View v) {
		
			callPhone();
		}
    	
    }

方法二:使用匿名內部類
bt_dail.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				callPhone();
			}
		})
方法三:讓activity實現點選介面

1、實現點選介面

public class MainActivity extends Activity implements OnClickListener
2、呼叫點選事件方法
bt_dail.setOnClickListener(this);

3、實現介面方法
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.bt_dail:
			callPhone();
			break;

		default:
			break;
		}
		
	}

方法四、在layout  XML檔案中定義button點選時所呼叫的方法 

1、指定方法

<Button
        android:id="@+id/bt_dail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="dailPhone"
        android:text="撥打此號碼" />

2、定義方法

	public void dailPhone(View view){
		callPhone();
	}

以下程式碼參考自《張澤華android視訊》

package com.itheima.phone;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
	private EditText  et_phone;

	/**
	 * activity建立的時候 呼叫的方法
	 */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 設定activity顯示的內容
        setContentView(R.layout.phone_ui);
        
        //尋找edittext  介面初始化的時候尋找控制元件 ,避免多次的查詢
        et_phone = (EditText) findViewById(R.id.et_phone);
        
        //查詢到一個關心的按鈕
        Button  bt_dail= (Button) this.findViewById(R.id.bt_dail);
        //給按鈕註冊一個點選事件的監聽器
       // bt_dail.setOnClickListener(new MyButtonListener());
        
        //2.點選事件的第二種寫法,匿名內部類
       /* bt_dail.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				callPhone();
			}
		});*/
        
       //3.點選事件的第三種寫法
        //bt_dail.setOnClickListener(this);
        
        //點選事件的第四種寫法
        
    }

    
    
    
    private void callPhone() {
		String number = et_phone.getText().toString().trim();
		if("".equals(number)){
			Toast.makeText(MainActivity.this, "電話號碼不能為空", Toast.LENGTH_SHORT).show();
		}else{
			//TODO:撥打電話  啟用系統的撥號應用 把電話號碼傳給系統的應用.
			// 打人  打醬油 動作+資料 泡茶 泡妞
			Intent intent = new Intent();//意圖
			intent.setAction(Intent.ACTION_CALL);//設定動作
			intent.setData(Uri.parse("tel:"+number));
			startActivity(intent);
		}
	}




	/**
     * 點選事件的第一種寫法 .  寫一個內部類.實現點選事件的介面
     * @author Administrator
     *
     */
    private class MyButtonListener implements OnClickListener{
    	/**
    	 * 當按鈕被點選的時候呼叫
    	 */
		@Override
		public void onClick(View v) {
		
			callPhone();
		}
    	
    }



    //點選事件的第三種寫法 讓activity實現點選事件的介面
	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.bt_dail:
			callPhone();
			break;

		default:
			break;
		}
		
	}
	//4.點選事件的第四種寫法  在xml檔案裡面定義 button點選的時候 呼叫什麼方法
	public void dailPhone(View view){
		callPhone();
	}
	
}

第五種方法:

把事件處理單獨成一個類,基本沒什麼好處,除非此事件處理器經常被複用。