一纠吴、Adapter的介紹
An Adapter object acts as a bridge between an AdapterView and the underlying data for that view. The Adapter provides access to the data items. The Adapter is also responsible for making aView for each item in the data set.
一個(gè)Adapter是AdapterView視圖與數(shù)據(jù)之間的橋梁,Adapter提供對(duì)數(shù)據(jù)的訪問(wèn)频蛔,也負(fù)責(zé)為每一項(xiàng)數(shù)據(jù)產(chǎn)生一個(gè)相應(yīng)的View。
二误算、Adapter的繼承關(guān)系
有兩個(gè)adapter的體系
三般码、Adapter中的方法
在實(shí)際應(yīng)用中,adapter的繼承體系應(yīng)用的更為廣泛被丧,所以盟戏,要對(duì)Adapter的方法有所了解
public interface Adapter {
// 為了避免產(chǎn)生大量的View浪費(fèi)內(nèi)存,在Android中甥桂,AdapterView中的View是可回收的使用的柿究。比方你有100項(xiàng)數(shù)據(jù)要顯示,而你的屏幕一次僅僅能顯示10條數(shù)據(jù)黄选,則
// 僅僅產(chǎn)生10個(gè)View蝇摸,當(dāng)往下拖動(dòng)要顯示第11個(gè)View時(shí),會(huì)把第1個(gè)View的引用傳遞過(guò)去办陷,更新里面的數(shù)據(jù)再顯示貌夕,也就是說(shuō)View可重用,僅僅是更新視圖中的數(shù)據(jù)用于顯示新
// 的一項(xiàng)懂诗,如果一個(gè)視圖的視圖類型是IGNORE_ITEM_VIEW_TYPE的話蜂嗽,則此視圖不會(huì)被重用
static final int IGNORE_ITEM_VIEW_TYPE = AdapterView.ITEM_VIEW_TYPE_IGNORE;
static final int NO_SELECTION = Integer.MIN_VALUE;
// 注冊(cè)一個(gè)Observer,當(dāng)Adapter所表示的數(shù)據(jù)改變時(shí)會(huì)通知它殃恒,DataSetObserver是一個(gè)抽象類植旧,定義了兩個(gè)方法:onChanged與onInvalidated
void registerDataSetObserver(DataSetObserver observer);
// 取消注冊(cè)一個(gè)Observer
void unregisterDataSetObserver(DataSetObserver observer);
// 所表示的數(shù)據(jù)的項(xiàng)數(shù)
int getCount();
// 返回指定位置的數(shù)據(jù)項(xiàng)
Object getItem(int position);
// 返回指定位置的數(shù)據(jù)項(xiàng)的ID
long getItemId(int position);
// 表示全部數(shù)據(jù)項(xiàng)的ID是否是穩(wěn)定的辱揭,在BaseAdapter中默認(rèn)返回了false,如果是不穩(wěn)定的病附,在CursorAdapter中返回了true问窃,Cursor中的_ID是不變的
boolean hasStableIds();
// 為每個(gè)數(shù)據(jù)項(xiàng)產(chǎn)生對(duì)應(yīng)的視圖
View getView(int position, View convertView, ViewGroup parent);
// 獲得對(duì)應(yīng)位置的這圖類型
int getItemViewType(int position);
// getView能夠返回的View的類型數(shù)量。(在HeaderViewListAdapter中能夠包括Header和Footer完沪,getView能夠返回Header域庇、Footer及Adapter
// 中的視圖,但其getViewTypeCount的實(shí)現(xiàn)僅僅是調(diào)用了內(nèi)部Adapter的的getViewTypeCount覆积,忽略了Header听皿、Footer中的View
// Type,不懂。
int getViewTypeCount();
//是否為空
boolean isEmpty();
}