版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
事件處理簡介一、基于監(jiān)聽器的事件處理2相比于基于回調(diào)的事件處理,這是更具“面向?qū)ο蟆毙再|(zhì)的事件處理方式。在監(jiān)聽器模型中,主要涉及三類對象:1)事件源EventSource:產(chǎn)生事件的來源,通常是各種組件,如按鈕,窗口等。2)事件Event:事件封裝了界面組件上發(fā)生的特定事件的具體信息,如果監(jiān)聽器需要獲取界面組件上所發(fā)生事件的相關(guān)信息,一般通過事件Event對象來傳遞。3)事件監(jiān)聽器EventListener:負(fù)責(zé)監(jiān)聽事件源發(fā)生的事件,并對不同的事件做相應(yīng)的處理?;诒O(jiān)聽器的事件處理機(jī)制是一種委派式Delegation的事件處理方式,事件源將整個事件委托給事件監(jiān)聽器,由監(jiān)聽器對事件進(jìn)行響應(yīng)處理。這種處理方式將事件源和事件監(jiān)聽器分離,有利于提供程序的可維護(hù)性。一、基于監(jiān)聽器的事件處理3View類中的OnLongClickListener監(jiān)聽器定義如下:(不需要傳遞事件)public
interface
OnLongClickListener{
boolean
onLongClick(Viewv);
}
public
interface
OnLongClickListener{
boolean
onLongClick(Viewv);}一、基于監(jiān)聽器的事件處理4View類中的OnLongClickListener監(jiān)聽器定義如下:(需要傳遞事件MotionEvent)public
interface
OnTouchListener{
boolean
onTouch(Viewv,MotionEventevent);
}
public
interface
OnTouchListener{
boolean
onTouch(Viewv,MotionEventevent);}二、基于回調(diào)的事件處理5相比基于監(jiān)聽器的事件處理模型,基于回調(diào)的事件處理模型要簡單些,該模型中,事件源和事件監(jiān)聽器是合一的,也就是說沒有獨立的事件監(jiān)聽器存在。當(dāng)用戶在GUI組件上觸發(fā)某事件時,由該組件自身特定的函數(shù)負(fù)責(zé)處理該事件。通常通過重寫Override組件類的事件處理函數(shù)實現(xiàn)事件的處理。二、基于回調(diào)的事件處理6View類實現(xiàn)了KeyEvent.Callback接口中的一系列回調(diào)函數(shù),因此,基于回調(diào)的事件處理機(jī)制通過自定義View來實現(xiàn),自定義View時重寫這些事件處理方法即可。public
interface
Callback{
//幾乎所有基于回調(diào)的事件處理函數(shù)都會返回一個boolean類型值,該返回值用于
//標(biāo)識該處理函數(shù)是否能完全處理該事件//返回true,表明該函數(shù)已完全處理該事件,該事件不會傳播出去//返回false,表明該函數(shù)未完全處理該事件,該事件會傳播出去
boolean
onKeyDown(int
keyCode,KeyEventevent);
boolean
onKeyLongPress(int
keyCode,KeyEventevent);
boolean
onKeyUp(int
keyCode,KeyEventevent);
boolean
onKeyMultiple(int
keyCode,int
count,KeyEventevent);public
interface
Callback{
//幾乎所有基于回調(diào)的事件處理函數(shù)都會返回一個boolean類型值,該返回值用于
//標(biāo)識該處理函數(shù)是否能完全處理該事件//返回true,表明該函數(shù)已完全處理該事件,該事件不會傳播出去//返回false,表明該函數(shù)未完全處理該事件,該事件會傳播出去
boolean
onKeyDown(int
keyCode,KeyEventevent);
boolean
onKeyLongPress(int
keyCode,KeyEventevent);
boolean
onKeyUp(int
keyCode,KeyEventevent);
boolean
onKeyMultiple(int
keyCode,int
count,KeyEventevent);}三、事件處理的比對7基于監(jiān)聽器的事件模型符合單一職責(zé)原則,事件源和事件監(jiān)聽器分開實現(xiàn);Android的事件處理機(jī)制保證基于監(jiān)聽器的事件處理會優(yōu)先于基于回調(diào)的事件處理被觸發(fā);某些特定情況下,基于回調(diào)的事件處理機(jī)制會更好的提高程序的內(nèi)聚性。四、自定義監(jiān)聽器事件處理8在實際項目開發(fā)中,我們經(jīng)常需要自定義監(jiān)聽器來實現(xiàn)自定義業(yè)務(wù)流程的處理,而且一般都不是基于GUI界面作為事件源的。這里以常見的app自動更新為例進(jìn)行說明,在自動更新過程中,會存在兩個狀態(tài):下載中和下載完成,而我們的程序需要在這兩個狀態(tài)做不同的事情,“下載中”需要在UI界面上實時顯示軟件包下載的進(jìn)度,“下載完成”后,取消進(jìn)度條的顯示。這里進(jìn)行一個模擬,重點在說明自定義監(jiān)聽器的事件處理流程。四、自定義監(jiān)聽器事件處理9定義事件監(jiān)聽器如下public
interface
DownloadListener{
public
void
onDownloading(int
porgress);//下載過程中的處理函數(shù)
public
void
onDownload();//下載完成的處理函數(shù)}四、自定義監(jiān)聽器事件處理10實現(xiàn)下載操作的工具類代碼:public
class
DownloadUtils{
private
static
DownloadUtilsinstance=null;
private
private(){
}
public
static
synchronized
DownloadUtilsinstance(){
if(instance==null){
instance=new
DownloadUtils();
}
returnsinstance;
}}private
boolean
isDownloading=ture;private
int
progress=0;//實際開發(fā)中這個函數(shù)需要傳人url作為參數(shù),以獲取服務(wù)器端安裝包位置
public
void
download(DownloadListenerlistener)throws
interruptdeException{while
(isDownloading){
listener.onDownloading(progress);
//下載過程的簡單模擬
Thread.sleep(1000);
progress+=10;
if(progress>=100){
isDownloading=false;
}}//下載完成listener.onDownload();}}四、自定義監(jiān)聽器事件處理11最后在main函數(shù)中模擬事件源:public
class
DownloadUI{
public
static
void
main(sting[]args){
try{
DownloadUtils.instance().download(new
MyDownloadListener());
}catch(InterruptedExceptiobe){
e.printStackTrace();
}
}
private
static
class
MyDownloadListenerimplements
DownloadListener{
@Overridepublic
void
onDownloa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年河南建筑職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試參考題庫有答案解析
- 2026年曹妃甸職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)筆試備考題庫帶答案解析
- 2026年合肥科技職業(yè)學(xué)院單招綜合素質(zhì)筆試備考題庫帶答案解析
- 土地轉(zhuǎn)租補充條款合同協(xié)議2025年
- 2026年黑龍江信息技術(shù)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試備考試題有答案解析
- 2026年渤海理工職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試模擬試題有答案解析
- 2026年煙臺文化旅游職業(yè)學(xué)院單招綜合素質(zhì)筆試備考題庫附答案詳解
- 停車場管理服務(wù)合同協(xié)議(2025年)
- 碳匯林監(jiān)測協(xié)議2025年長期合作
- 2026年福建林業(yè)職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試參考題庫帶答案解析
- 北京市朝陽區(qū)2023-2024學(xué)年五年級上學(xué)期語文期末試卷(含答案)
- 滬教版八年級化學(xué)(上冊)期末階段檢測及答案
- DL-T797-2012風(fēng)力發(fā)電場檢修規(guī)程
- ISO27001:2022信息安全管理手冊+全套程序文件+表單
- 導(dǎo)尿技術(shù)常見并發(fā)癥及處理
- 23秋國家開放大學(xué)《漢語基礎(chǔ)》期末大作業(yè)(課程論文)參考答案
- 電弧爐煉鋼工安全操作規(guī)程
- 人教版小學(xué)數(shù)學(xué)六年級年級下冊課本習(xí)題集(帶有課本插圖)
- 七年級數(shù)學(xué)上冊 期中考試卷(滬科安徽版)
- 人工智能在體育訓(xùn)練與競技分析中的應(yīng)用
- 檢查井工程量計算模板(原)
評論
0/150
提交評論