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