




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
實(shí)訓(xùn)Android北京電子科技職業(yè)學(xué)院1Adapter與MVC模式2Adapter的常用方法3幾種類型的Adapter1Adapter與MVC模式Adapter與MVC模式Adapter是用來幫助填充數(shù)據(jù)的中間橋梁,比如通過它將數(shù)據(jù)填充到ListView,GridView,Gallery.而android提供了幾種Adapter:ArrayAdapter,BaseAdapter,CursorAdapter,HeaderViewListAdapter……根據(jù)數(shù)據(jù)來源形式的不同可以選擇不同的Adapter,比如數(shù)據(jù)來源于一個(gè)Arraylist就使用BaseAdapter,SimpleAdapter,而數(shù)據(jù)來源于通過查詢數(shù)據(jù)庫獲得Cursor那就使用CursorAdapter。Adapter與MVC模式之前我們學(xué)習(xí)了MVC模式,在這里我們再來大致回顧一下,MVC組件類型的關(guān)系如下圖1所示:Adapter與MVC模式其中:Model:通常可以理解為數(shù)據(jù),負(fù)責(zé)執(zhí)行程序的核心運(yùn)算與判斷邏輯,通過view獲得用戶輸入的數(shù)據(jù),然后從數(shù)據(jù)庫查詢相關(guān)的信息,最后進(jìn)行運(yùn)算和判斷,再將得到的結(jié)果交給view來顯示;View:用戶的操作接口,說白了就是GUI,應(yīng)該使用哪種接口組件,組件間的排列位置與順序都需要設(shè)計(jì);Controller:控制器,作為model與view之間的樞紐,負(fù)責(zé)控制程序的執(zhí)行流程以及對象之間的一個(gè)互動(dòng)。Adapter與MVC模式而我們馬上要學(xué)習(xí)的Adapter,則是中間的這個(gè)Controller的部分:Model(數(shù)據(jù))--->Controller(以什么方式顯示到)--->View(用戶界面),是用來幫助填充數(shù)據(jù)的中間橋梁,簡單點(diǎn)說就是:將各種數(shù)據(jù)以合適的形式顯示到view上,提供給用戶看。Adapter與MVC模式下面我們來看一下Adapter的繼承結(jié)構(gòu)圖:2Adapter的常用方法Adapter的常用方法class
MyAdapter
extends
BaseAdapter
{
private
Contextcontext;
public
MyAdapter(Contextcontext)
{
this.context=context;
}
@Override
publicint
getCount(){
//HowmanyitemsareinthedatasetrepresentedbythisAdapter.(在此適配器中所代表的數(shù)據(jù)集中的條目數(shù))
return0;
}
我們先來看看繼承Adapter需要重寫的方法:Adapter的常用方法
@Override
public
ObjectgetItem(int
position){
//Getthedataitemassociatedwiththespecifiedpositioninthedataset.(獲取數(shù)據(jù)集中與指定索引對應(yīng)的數(shù)據(jù)項(xiàng))
returnnull;
}
@Override
publiclong
getItemId(int
position){
//Gettherowidassociatedwiththespecifiedpositioninthelist.(取在列表中與指定索引對應(yīng)的行id)
return0;
}
@Override
public
ViewgetView(int
position,ViewconvertView,ViewGroupparent){
//GetaViewthatdisplaysthedataatthespecifiedpositioninthedataset.
returnnull;
}
}
Adapter的常用方法1.
ListView是在什么時(shí)候設(shè)置對Adapter的數(shù)據(jù)監(jiān)聽的?在setAdapter(ListAdapteradapter)中,會(huì)先取消ListView中原來的mAdapter中的數(shù)據(jù)監(jiān)聽(mAdapter.unregisterDataSetObserver(mDataSetObserver);),然后再設(shè)置對新設(shè)置的adapter的數(shù)據(jù)監(jiān)聽。Adapter的常用方法2.
getView(intposition,
View
convertView,
ViewGroup
parent)我們一般在給一個(gè)activity設(shè)定一個(gè)視圖的時(shí)候,都用的是setcontentview這個(gè)方法來直接指定布局文件,但是activity中早已經(jīng)內(nèi)置了指定視圖的工具—-LayoutInflater.getView工具就像是一個(gè)壓力泵,能夠把布局文件壓縮成一個(gè)視圖,呈現(xiàn)出來。它的作用類似于findViewById(),不同點(diǎn)是LayoutInflater是用來找layout下xml布局文件,并且實(shí)例化!而findViewById()是找具體xml下的具體widget控件.函數(shù)一共有三個(gè)參數(shù),position標(biāo)識我們現(xiàn)在正在繪制listview中第幾個(gè)item,converview相當(dāng)于一個(gè)view控件的緩存裝置,它將我們定義好顯示沒一行item的布局文件壓縮成一個(gè)視圖,布局中的部分view都在它里面。在創(chuàng)建adapter的時(shí)候,通過adapter的構(gòu)造函數(shù),定義了一個(gè)LayoutInfalter,并且獲取到當(dāng)前activity的LayoutInflater。之后,通過inflater壓縮xml文件形成一個(gè)視圖,賦值convertview。因?yàn)橐粋€(gè)布局文件中所有的控件展示,都是一個(gè)item,因?yàn)椴季种兴械目丶?yīng)該以一個(gè)整體出現(xiàn)。所以,我們定義了一個(gè)class–>ViewHolder,里面的成員就是我們每一行item布局文件中的控件集合。通過findviewbyid我們找到了布局當(dāng)中的每一個(gè)view,并且最后把相應(yīng)的數(shù)據(jù)投放在view上面予以顯示。Adapter的常用方法3.getCount())Adapter的getCount()用來干啥?
在ListView中,在onMeasure以及觸控分發(fā)響應(yīng)等過程中都會(huì)用到Adapter的getCount()函數(shù)。毫無疑問的是:它應(yīng)該返回底層數(shù)據(jù)的數(shù)據(jù)個(gè)數(shù)。Adapter的常用方法4.getItem(intposition)getItem()在AdapterView中被調(diào)用,然后供用戶調(diào)用:從這兩個(gè)函數(shù)的描述我們可以看出,我們應(yīng)該在Adapter的getItem()方法中返回position對應(yīng)的數(shù)據(jù),但是不是說一定要返回用于在Item的View上展示的數(shù)據(jù),這個(gè)還是看需求,雖然可能大部分情況都是返回View中展示的數(shù)據(jù)??v觀整個(gè)結(jié)構(gòu),可以說存在這樣的三層:dataLists(原底層數(shù)據(jù))--Adapter--AdapterView,有了getItem()方法的存在,我們可以直接利用Adapter來獲取數(shù)據(jù),而不需要獲取底層dataLists的引用;有了getItemAtPosition()方法的存在,我們可以直接利用AdapterView獲取底層數(shù)據(jù),而不需要獲取其Adapter的引用。這樣的話,對于編程的簡便性以及解耦性都好很多。Adapter的常用方法5.getItemId(intposition)與上面分析的getItem()方法一樣,getItemId()和getItemIdAtPosition()都提供了編程上面的便利。但是目前來看,由于對id沒啥需求,所以大部分在重寫getItemId方法時(shí)都是直接返回的position值,這樣做也是對的,雖然從數(shù)據(jù)獲取上沒啥意義。但是我想說明的是,不要被這個(gè)做法所限制,而以為ItemId就是item在數(shù)據(jù)中的position。其實(shí)若有需求,可以利用getItemId()方法返回一些其他的值,比如每個(gè)item數(shù)據(jù)在數(shù)據(jù)庫中id值,或者每個(gè)人的身份證號等。3幾種類型的Adapter幾種類型的AdapterBaseAdapter:基礎(chǔ)數(shù)據(jù)適配器,是用得最多的一個(gè)Adapter,它的主要用途是將一組數(shù)據(jù)傳到例如ListView等UI顯示組件,實(shí)際開發(fā)中我們會(huì)繼承這個(gè)類并且重寫相關(guān)方法,由于是基礎(chǔ)類型,所以自由度高,可以修改的地方多。幾種類型的AdapterArrayAdapter:數(shù)據(jù)和UI一對一,傳入數(shù)據(jù)源和布局文件,完成顯示。支持泛型操作,最簡單的一個(gè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB41∕T 1797-2019 普通照明用LED管形燈性能要求
- 買房獨(dú)家委托協(xié)議
- 汽車空調(diào)系統(tǒng)出風(fēng)口設(shè)計(jì)小知識汽車空調(diào)系統(tǒng)維修課堂課件
- 認(rèn)識燃燒的原理與實(shí)質(zhì)船舶消防完劍俠課件
- 橋梁下部結(jié)構(gòu)施工交通工程專業(yè)群課件
- 10相親相愛一家人 第2課時(shí) 教學(xué)設(shè)計(jì)-2024-2025學(xué)年道德與法治一年級下冊統(tǒng)編版
- 任務(wù)六 XXX 運(yùn)營商城域骨干傳送網(wǎng)線路一期工程案例分析-主講老師李永華-1738496356995
- 0 數(shù)學(xué)游戲-在教室里認(rèn)一認(rèn)(教學(xué)設(shè)計(jì))-2024-2025學(xué)年一年級上冊數(shù)學(xué)人教版
- 2025合同協(xié)議匯編
- 2025授權(quán)代理轉(zhuǎn)讓專利技術(shù)合同
- 2025年山東銀座集團(tuán)股份有限公司招聘筆試參考題庫含答案解析
- 2025年貴州高速投資集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 產(chǎn)科妊娠期肝內(nèi)膽汁淤積癥護(hù)理查房課件
- 內(nèi)鏡室工作流程
- 《Hadoop技術(shù)原理》課件-11.Flume
- 血液標(biāo)本采集(靜脈采血)
- 水利水電建筑工程基礎(chǔ)知識單選題100道及答案解析
- 【MOOC】3D工程圖學(xué)-華中科技大學(xué) 中國大學(xué)慕課MOOC答案
- 安全環(huán)保班組培訓(xùn)
- 2024年北京大學(xué)強(qiáng)基計(jì)劃物理試題(附答案)
- TCUWA40055-2023排水管道工程自密實(shí)回填材料應(yīng)用技術(shù)規(guī)程
評論
0/150
提交評論