由圖能夠看到在Android中與Adapter有關的全部接口、類的完整層級圖。在咱們使用過程當中能夠根據本身的需求實現接口或者繼承類進行必定的擴展。比較經常使用的有 BaseAdapter,SimpleAdapter,ArrayAdapter,SimpleCursorAdapter等。數據庫
BaseAdapter是一個抽象類,繼承它須要實現較多的方法,因此也就具備較高的靈活性;數組
ArrayAdapter支持泛型操做,最爲簡單,只能展現一行字。函數
SimpleAdapter有最好的擴充性,能夠自定義出各類效果。佈局
SimpleCursorAdapter能夠適用於簡單的純文字型ListView,它須要Cursor的字段和UI的id對應起來。如須要實現更復雜的UI也能夠重寫其餘方法。能夠認爲是SimpleAdapter對數據庫的簡單結合,能夠方便地把數據庫的內容以列表的形式展現出來。優化
SimpleAdapter:spa
ArrayAdapter比較簡單,這裏就不說了,簡單說一下SimpleAdapter,SimpleAdapter能夠直接使用,下面介紹一下 SimpleAdapter中參數的含義xml
new SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) context :這個表示上下文繼承
data :填充的數據,一個Map集合中的數據表明在一個條目的數據,每個條目的數據都以鍵值對的方式存入到 Map集合中,而後再放到List集合中,
接口
resource:條目的佈局文件
事件
from:這個字符串數組裏面存放的是 map集合中的鍵 ,用於在Adapter中取出數據用的
to :這個int數組 存放的是條目佈局中個個組件的id ,但順序要與from中的 鍵相對於,即這個組件的數據在 Map中的鍵要與這個組件的 id 對應。方便在Adaper中爲其添加數據
BaseAdapter:
通常自定義適配器都用BaseAdapter,首先繼承這個抽象類,而後實現其方法
如圖,這是一個自定義的Adapter,他的功能和SimpleAdapter相似。這裏須要寫一個構造函數和覆蓋父類的方法。構造方法中的參數和SimpleAdapter的同樣,下面介紹一下覆蓋的方法的含義
getCount(): 返回data的大小,即條目的總數
getItem():返回當前條目的數據,這裏返回的Map集合,也可返回具體數據
getItemId():返回當前位置的 條目Id 這裏直接返回位置便可,由於位置也是惟一的
getView():這個方法是用對條目來填充數據,而後將填充好的數據返回
在getView中能夠爲組件設置單擊事件,這樣就能夠響應組件的點擊事件。但要注意的是,須要將組件設置爲不可獲取焦點,但可點擊,這個能夠直接在xml文件clickable="boolean",focusable=「boolean」。由於若是獲取焦點的話會奪去ListView獲取GridView 的焦點,而後條目不可點擊了。值得注意的是TextView默認狀況下clickable,focusable都爲false,Button都爲true。
HandleView是用來優化的,避免findViewById()這條語句的重複執行,原理就是將獲取的組件放入HandleView中,而後再將HandleView放入convertView的Tag中,用的時候在取出
ListView 和 GridView 的 setOnItemClickListener 方法設置的是條目監聽,只能監聽條目,不能監聽條目中的組件,因此要自定義適配器,在getView中添加條目中組件的監聽事件,而SimpleAdapter卻不能,這就是自定義Adapter的優勢