




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實訓(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ù)來源于一個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è)計;Controller:控制器,作為model與view之間的樞紐,負(fù)責(zé)控制程序的執(zhí)行流程以及對象之間的一個互動。Adapter與MVC模式而我們馬上要學(xué)習(xí)的Adapter,則是中間的這個Controller的部分:Model(數(shù)據(jù))--->Controller(以什么方式顯示到)--->View(用戶界面),是用來幫助填充數(shù)據(jù)的中間橋梁,簡單點說就是:將各種數(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ù)項)
returnnull;
}
@Override
publiclong
getItemId(int
position){
//Gettherowidassociatedwiththespecifiedpositioninthelist.(取在列表中與指定索引對應(yīng)的行id)
return0;
}
@Override
public
ViewgetView(int
position,ViewconvertView,ViewGroupparent){
//GetaViewthatdisplaysthedataatthespecifiedpositioninthedataset.
returnnull;
}
}
Adapter的常用方法1.
ListView是在什么時候設(shè)置對Adapter的數(shù)據(jù)監(jiān)聽的?在setAdapter(ListAdapteradapter)中,會先取消ListView中原來的mAdapter中的數(shù)據(jù)監(jiān)聽(mAdapter.unregisterDataSetObserver(mDataSetObserver);),然后再設(shè)置對新設(shè)置的adapter的數(shù)據(jù)監(jiān)聽。Adapter的常用方法2.
getView(intposition,
View
convertView,
ViewGroup
parent)我們一般在給一個activity設(shè)定一個視圖的時候,都用的是setcontentview這個方法來直接指定布局文件,但是activity中早已經(jīng)內(nèi)置了指定視圖的工具—-LayoutInflater.getView工具就像是一個壓力泵,能夠把布局文件壓縮成一個視圖,呈現(xiàn)出來。它的作用類似于findViewById(),不同點是LayoutInflater是用來找layout下xml布局文件,并且實例化!而findViewById()是找具體xml下的具體widget控件.函數(shù)一共有三個參數(shù),position標(biāo)識我們現(xiàn)在正在繪制listview中第幾個item,converview相當(dāng)于一個view控件的緩存裝置,它將我們定義好顯示沒一行item的布局文件壓縮成一個視圖,布局中的部分view都在它里面。在創(chuàng)建adapter的時候,通過adapter的構(gòu)造函數(shù),定義了一個LayoutInfalter,并且獲取到當(dāng)前activity的LayoutInflater。之后,通過inflater壓縮xml文件形成一個視圖,賦值convertview。因為一個布局文件中所有的控件展示,都是一個item,因為布局中所有的控件應(yīng)該以一個整體出現(xiàn)。所以,我們定義了一個class–>ViewHolder,里面的成員就是我們每一行item布局文件中的控件集合。通過findviewbyid我們找到了布局當(dāng)中的每一個view,并且最后把相應(yīng)的數(shù)據(jù)投放在view上面予以顯示。Adapter的常用方法3.getCount())Adapter的getCount()用來干啥?
在ListView中,在onMeasure以及觸控分發(fā)響應(yīng)等過程中都會用到Adapter的getCount()函數(shù)。毫無疑問的是:它應(yīng)該返回底層數(shù)據(jù)的數(shù)據(jù)個數(shù)。Adapter的常用方法4.getItem(intposition)getItem()在AdapterView中被調(diào)用,然后供用戶調(diào)用:從這兩個函數(shù)的描述我們可以看出,我們應(yīng)該在Adapter的getItem()方法中返回position對應(yīng)的數(shù)據(jù),但是不是說一定要返回用于在Item的View上展示的數(shù)據(jù),這個還是看需求,雖然可能大部分情況都是返回View中展示的數(shù)據(jù)??v觀整個結(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方法時都是直接返回的position值,這樣做也是對的,雖然從數(shù)據(jù)獲取上沒啥意義。但是我想說明的是,不要被這個做法所限制,而以為ItemId就是item在數(shù)據(jù)中的position。其實若有需求,可以利用getItemId()方法返回一些其他的值,比如每個item數(shù)據(jù)在數(shù)據(jù)庫中id值,或者每個人的身份證號等。3幾種類型的Adapter幾種類型的AdapterBaseAdapter:基礎(chǔ)數(shù)據(jù)適配器,是用得最多的一個Adapter,它的主要用途是將一組數(shù)據(jù)傳到例如ListView等UI顯示組件,實際開發(fā)中我們會繼承這個類并且重寫相關(guān)方法,由于是基礎(chǔ)類型,所以自由度高,可以修改的地方多。幾種類型的AdapterArrayAdapter:數(shù)據(jù)和UI一對一,傳入數(shù)據(jù)源和布局文件,完成顯示。支持泛型操作,最簡單的一個
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玻璃高空施工方案
- 八大特殊作業(yè)安全管理培訓(xùn)
- 電氣安全-電氣安全技術(shù)標(biāo)準(zhǔn)
- 人力資源員工背景調(diào)查方法和注意事項
- 《美容護(hù)理設(shè)備與應(yīng)用》課件
- 三寶四口及臨邊防護(hù)安全管理培訓(xùn)講義
- 2025年公司簽訂辦公場地租賃合同范本
- 2025汽車銷售加盟合同范本
- 備考策略2024年農(nóng)作物種子繁育員考試試題及答案
- 2025年北京市合同范本(適用于非全日制從業(yè)人員)
- 大型活動策劃與管理第九章 大型活動知識產(chǎn)權(quán)保護(hù)
- 2024年新課標(biāo)培訓(xùn)2022年小學(xué)英語新課標(biāo)學(xué)習(xí)培訓(xùn)課件
- 煤礦反三違認(rèn)定培訓(xùn)課件
- 2024年安全標(biāo)志標(biāo)識標(biāo)準(zhǔn)圖冊
- 航空航天知識講座學(xué)習(xí)課件
- 浙江省嘉興市2024-2025學(xué)年高一化學(xué)下學(xué)期期末考試試題含解析
- 應(yīng)急管理概論教學(xué)課件
- 7《不甘屈辱 奮勇抗?fàn)帯罚ń虒W(xué)設(shè)計)-2023-2024學(xué)年道德與法治五年級下冊統(tǒng)編版
- (新)100篇初中生語文閱讀題(含答案)匯編
- 艾梅乙知識競賽題庫及答案(80題)
- DLT 1053-2017 電能質(zhì)量技術(shù)監(jiān)督規(guī)程
評論
0/150
提交評論