聊聊Android監(jiān)聽器有四種實(shí)現(xiàn)方式
今天我們來聊聊Android監(jiān)聽器有四種實(shí)現(xiàn)方式:1. 使用匿名內(nèi)部類的方式實(shí)現(xiàn)監(jiān)聽事件。2. 使用外部類的方式實(shí)現(xiàn)監(jiān)聽事件。3. 使用接口方式實(shí)現(xiàn)監(jiān)聽事件。4.直接綁定到標(biāo)簽。
第一種:匿名內(nèi)部類作為事件監(jiān)聽器類
大部分時(shí)候,事件處理器都沒有什么利用價(jià)值(可利用代碼通常都被抽象成了業(yè)務(wù)邏輯方法),因此大部分事件器更合適,實(shí)際上,這種形式是目前是最廣泛的事件監(jiān)聽器形式。上面的程序代碼就是匿名內(nèi)部類來創(chuàng)建事件監(jiān)對于使用匿名內(nèi)部類作為監(jiān)聽器的形式來說,唯一的缺點(diǎn)就是匿名內(nèi)部類的語法有點(diǎn)不易掌握,如果讀者java作為監(jiān)聽器。
第二種:內(nèi)部類作為監(jiān)聽器
將事件監(jiān)聽器類定義成當(dāng)前類的內(nèi)部類。1、使用內(nèi)部類可以在當(dāng)前類中復(fù)用監(jiān)聽器類,因?yàn)楸O(jiān)聽器類是外部類內(nèi)部類的兩個(gè)優(yōu)勢。上面代碼就是內(nèi)部類的形式!!
第三種:Activity本身作為事件監(jiān)聽器
這種形式使用activity本身作為監(jiān)聽器類,可以直接在activity類中定義事件處理器方法,這種形式非常簡潔Activity的主要職責(zé)應(yīng)該是完成界面初始化;但此時(shí)還需包含事件處理器方法,從而引起混亂。(2)如果act上面的程序讓Activity類實(shí)現(xiàn)了OnClickListener事件監(jiān)聽接口,從而可以在該Activity類中直接定義事件處象時(shí),直接使用this作為事件監(jiān)聽器對象即可。
第四種:外部類作為監(jiān)聽器
ButtonTest類
當(dāng)用戶單擊button按鈕時(shí),程序?qū)|發(fā)MyButtonListener監(jiān)聽器
外部MyButtonListener類
使用頂級類定義事件監(jiān)聽器類的形式比較少見,主要因?yàn)槿缦聝蓚€(gè)原因:
1、事件監(jiān)聽器通常屬于特定的gui界面,定義成外部類不籃球提高程序的內(nèi)聚性。 2、外部類形式的事件監(jiān)聽器不能自由訪問創(chuàng)建gui界面的類中的組件,編程不夠簡潔。
但如果某個(gè)事件監(jiān)聽器確實(shí)需要被多個(gè)gui界面所共享,而且主要是完成某種業(yè)務(wù)邏輯的實(shí)現(xiàn),則可以考慮使用第五種:直接綁定到標(biāo)簽
Android還有一種更簡單的綁定事件監(jiān)聽器的的方式,直接在界面布局文件中為指定標(biāo)簽綁定事件處理方法。 對于很多Android標(biāo)簽而言,它們都支持如onClick、onLongClick等屬性,這種屬性的屬性值就是一個(gè)形如x(View source)
的方法的方法名。在布局文件中為button添加屬性,如一代碼:
為Button按鈕綁定一個(gè)事件處理方法:clickHanlder,這意味著開發(fā)者需要在該界面布局對應(yīng)的Activity中定處理該按鈕上的單擊事件。
下面是該界面布局對應(yīng)的java代碼: