真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android(基于監(jiān)聽)的事件處理

    

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比資溪網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式資溪網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋資溪地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

     基于監(jiān)聽的事件模型分工更明確,事件源、事件監(jiān)聽由兩個(gè)類分開,因此具有更好的可維護(hù)性。

    Android的事件處理機(jī)制保證基于監(jiān)聽的事件監(jiān)聽器會(huì)被優(yōu)先出發(fā)。


    在事件監(jiān)聽的處理模型中,主要涉及三類對(duì)象:

    1.Event Source(事件源):事件發(fā)生的場(chǎng)所,通常就是各個(gè)組件,例如按鈕,窗口,菜單等。

    2.Event(事件):事件封裝了界面組件上發(fā)生的特定事情(通常就是一次用戶操作)。如果程序需要獲得界面組件上所發(fā)生事情的相關(guān)信息,一般通過Event對(duì)象來(lái)取得。

    3.Event Listener(事件監(jiān)聽器):負(fù)責(zé)監(jiān)聽事件源所發(fā)生的事件,并對(duì)各種事件做出相應(yīng)的響應(yīng)。

android(基于監(jiān)聽)的事件處理

    

    Android為不同的界面組件提供了不同的監(jiān)聽器接口:

    1.View.OnClickListener:單擊事件的事件監(jiān)聽器必須實(shí)現(xiàn)的接口。

    2.View.OnCreateContextMenuListener:創(chuàng)建上下文菜單事件的事件監(jiān)聽器必須實(shí)現(xiàn)的接口。

    3.View.onFocusChangeListener:焦點(diǎn)改變事件的事件監(jiān)聽器必須實(shí)現(xiàn)的接口。

    4.View.OnKeyListener:按鍵事件的事件監(jiān)聽器必須實(shí)現(xiàn)的接口。

    5.View.OnLongClickListener:長(zhǎng)按事件的事件監(jiān)聽器必須實(shí)現(xiàn)的接口。

    6.View.OnTouchListener:觸摸事件的事件監(jiān)聽器必須實(shí)現(xiàn)的接口。

    所謂的事件監(jiān)聽器,其實(shí)就是實(shí)現(xiàn)了特定接口的java類的實(shí)例。在程序中實(shí)現(xiàn)事件監(jiān)聽器,通常有如下幾種形式。

    1.內(nèi)部類形式:將事件監(jiān)聽器類定義成當(dāng)前的內(nèi)部類。

    2.外部類形式:將事件監(jiān)聽器類定義成一個(gè)外部類。

    3.Activity本身作為事件監(jiān)聽器類:讓Activity本身實(shí)現(xiàn)監(jiān)聽器接口,并實(shí)現(xiàn)事件處理方法。

    4.匿名內(nèi)部類形式:使用匿名內(nèi)部類創(chuàng)建事件監(jiān)聽器對(duì)象。

    5.直接綁定標(biāo)簽:為UI組件的android:onClick屬性指定事件的監(jiān)聽方法,開發(fā)者需要在Activity中定義該事件監(jiān)聽方法(該方法必須有一個(gè)View類型的形參,該形參代表被單擊的UI組件),當(dāng)用戶單擊該UI組件時(shí),系統(tǒng)將會(huì)激發(fā)android:onClick屬性所指定的方法。

    1.內(nèi)部類作為事件監(jiān)聽器類

    使用內(nèi)部類作為事件監(jiān)聽器類的優(yōu)勢(shì):

    ①使用內(nèi)部類可以在當(dāng)前類中復(fù)用該監(jiān)聽器類

    ②因?yàn)楸O(jiān)聽器類是外部類的內(nèi)部類,所以可以自由訪問外部類的所有界面組件。

示例:

activity_main.xml   



    

MainActivity.java

package com.example.neibulei;
public class MainActivity extends Activity {

	private Button bn;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 獲取activity_main界面中的id為bn按鈕
		bn = (Button) findViewById(R.id.bn);
		// 為bn按鈕綁定點(diǎn)擊事件監(jiān)聽器
		bn.setOnClickListener(new MyClickListener());
	}
	
	// 定義一個(gè)單擊事件監(jiān)聽器
	class MyClickListener implements View.OnClickListener {
		@Override
		// 實(shí)現(xiàn)監(jiān)聽器類必須實(shí)現(xiàn)的方法,該方法將會(huì)作為事件處理器
		public void onClick(View v) {
			// TODO Auto-generated method stub
			//事件處理器做出的響應(yīng)
			Toast.makeText(MainActivity.this, "內(nèi)部類做為事件監(jiān)聽器類", 1).show();
		}
	}
}

    2.外部類作為事件監(jiān)聽器類

    外部類作為事件監(jiān)聽器類的劣勢(shì):

    ①事件監(jiān)聽器通常屬于特定的GUI界面,定義成外部類不利于提高程序的內(nèi)聚性。

    ②外部類形式的事件監(jiān)聽器不能自由訪問GUI界面的類中的組件,變成不夠簡(jiǎn)潔。

    

    外部類作為事件監(jiān)聽器類的優(yōu)勢(shì):

    如果某個(gè)事件監(jiān)聽器確實(shí)需要被多個(gè)GUI界面所共享,而且主要是完成某種業(yè)務(wù)邏輯的實(shí)現(xiàn),則可以考慮使用外部類的形式來(lái)定義事件監(jiān)聽器類。

示例:

activity_main.xml 



    

    

    


MainActivity.java

package com.example.waibulei;

public class MainActivity extends Activity {
	EditText address; // 短信發(fā)送給這個(gè)號(hào)碼
	EditText content; // 短信內(nèi)容
	Button bn; // 發(fā)送按鈕

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// 獲取頁(yè)面內(nèi)中的收件人地址、短信內(nèi)容
		address = (EditText) findViewById(R.id.address);
		content = (EditText) findViewById(R.id.content);
		bn = (Button) findViewById(R.id.bn);
		// 為bn按鈕綁定長(zhǎng)按事件監(jiān)聽器
		bn.setOnLongClickListener(new SendSmsListener(this, address, content));
	}
}


SendSmsListener.java

package com.example.waibulei;

public class SendSmsListener implements OnLongClickListener {
	private Activity act;
	private EditText address;// 短信發(fā)送給這個(gè)號(hào)碼
	private EditText content;// 短信內(nèi)容

	// 構(gòu)造方法取得上下文環(huán)境,獲得兩個(gè)文本框控件
	public SendSmsListener(Activity act, EditText address, EditText content) {
		this.act = act;
		this.address = address;
		this.content = content;
	}

	@Override
	public boolean onLongClick(View v) {
		// 取出號(hào)碼與短信內(nèi)容
		String addressStr = address.getText().toString().trim();
		String contentStr = content.getText().toString().trim();
		// 獲取短信管理器
		SmsManager smsManager = SmsManager.getDefault();
		// 發(fā)送文本短信
		smsManager.sendTextMessage(addressStr, null, contentStr, null, null);
		return false;
	}

}

在AndroidManifest.xml上添加發(fā)送短信的權(quán)限

  

 3.Activity本身作為事件監(jiān)聽器 

    Activity本身作為事件監(jiān)聽器的劣勢(shì):

    ①這種形式可能造成程序結(jié)構(gòu)混亂,Activity的主要職責(zé)應(yīng)該是完成界面初始化工作,但此時(shí)還需要包含事件處理器的方法,從而引起混亂。

    ②如果Activity界面類需要實(shí)現(xiàn)監(jiān)聽器接口,讓人感覺比較怪異。

     Activity本身作為事件監(jiān)聽器的優(yōu)勢(shì):

    直接在Activity類中定義事件處理方法,非常簡(jiǎn)潔。

示例:

activity_main.xml 



    


MainActivity.java

package com.example.activitybenshen;

//實(shí)現(xiàn)事件監(jiān)聽器接口
public class MainActivity extends Activity implements OnClickListener {
	private Button bn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		bn = (Button) findViewById(R.id.bn);
		// 直接使用Activity作為監(jiān)聽器
		bn.setOnClickListener(this);
	}

	@Override
	// 實(shí)現(xiàn)事件處理方法
	public void onClick(View v) {
		// TODO Auto-generated method stub
		Toast.makeText(MainActivity.this, "直接使用Activity作為監(jiān)聽器", 1).show();
	}
}

    4.匿名內(nèi)部類作為事件監(jiān)聽器類   

    匿名內(nèi)部類作為事件監(jiān)聽器類的優(yōu)勢(shì):

    大部分時(shí)候,事件處理器都沒有什么復(fù)用價(jià)值(可復(fù)用代碼通常都被抽象成了業(yè)務(wù)邏輯方法),因此大部分事件監(jiān)聽器只是臨時(shí)使用一次,所以使用匿名內(nèi)部類形式的事件監(jiān)聽器更合適。 

    匿名內(nèi)部類作為事件監(jiān)聽器類的劣勢(shì):

    語(yǔ)法不宜掌握。

示例:

activity_main.xml



    

MainActivity.java

package com.example.nimingneibulei;

public class MainActivity extends Activity {
	private Button bn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		bn = (Button) findViewById(R.id.bn);
		// 使用匿名內(nèi)部類作為事件監(jiān)聽器
		bn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 事件監(jiān)聽器的響應(yīng)
				Toast.makeText(MainActivity.this, "匿名內(nèi)部類作為事件監(jiān)聽器", 1).show();
			}
		});
	}
}

    5.直接綁定到標(biāo)簽 

    對(duì)于很多Android界面組件標(biāo)簽而言,它們都支持OnClick屬性,該屬性值就是一個(gè)形如xxx(View source)的方法的方法名。

示例:

activity_main.xml



    

    
MainActivity.java

package com.example.onclick;

public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	// 定義一個(gè)事件處理方法
	// 其中source參數(shù)代表事件源
	public void clickHandler(View source) {
		Toast.makeText(MainActivity.this, "直接綁定到標(biāo)簽onClick", 1).show();
	}
}

    


網(wǎng)站題目:android(基于監(jiān)聽)的事件處理
文章路徑:http://weahome.cn/article/psgjis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部