Adapter是資料繫結到UI介面上的橋接類,Adapter負責建立顯示每個item的子View和提供對下層資料的訪問,通過它將資料填充到ListView, GridView, Gallery。Android 系統提供了幾種Adapter:ArrayAdapter<T>、 BaseAdapter、CursorAdapter、 HeaderViewListAdapter、ListAdapter、 ResourceCursorAdapter、SimpleAdapter、SimpleCursorAdapter、SpinnerAdapter、WrapperListAdapter,比較常用的有
BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。 Data、Adapter、View三者的關係如所示:
在多數情況下,不需要建立自己的Adapter,Android提供了一系列Adapter來將資料繫結到UI Widget上,如所示。因為Android負責提供資料和選擇用於顯示每個項目的View,所以Adapter能快速地修改要綁定的控制項的外觀和功能。
❑ BaseAdapter是一個抽象類別,繼承它需要實現較多的方法,所以也就具有較高的靈活性;
❑ ArrayAdapter支援泛型操作,通常需要實現getView方法,特殊情況下(結合資料row id),為了讓UI事件相應處理方便點最好重寫getItemId(); ArrayAdapter是一個綁定View到一組對象的通用類。預設情況下,ArrayAdapter綁定每個對象的toString值到在layout中預先定義的TextView控制項上。
❑ SimpleCursorAdapter可以適用於簡單的純文字型ListView,它需要Cursor的欄位和UI的id對應起來,如需要實現更複雜的UI也可以重寫其他方法。SimpleCursorAdapter綁定View到Content Provider查詢返回的遊標上。指定一個XML layout定義,然後將資料集中的每一列的值綁定到layout中的一個View上。
1. BaseAdapter的例子
1: /**
2: * 歌曲列表適配器
3: *
4: * @version 1.0
5: * @author linghu
6: */
7: public class AudioListAdapter extends BaseAdapter {
8:
9: private Context mContext;
10:
11: // 歌曲集合
12: private ArrayList<Audio> mAudios;
13:
14: public AudioListAdapter(Context mContext, ArrayList<Audio> mAudios) {
15: this.mContext = mContext;
16: this.mAudios = mAudios;
17: }
18:
19: @Override
20: public int getCount() {
21: return mAudios != null ? mAudios.size() : 0;
22: }
23:
24: @Override
25: public Object getItem(int position) {
26: if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {
27: return mAudios.get(position);
28: }
29: return null;
30: }
31:
32: /**
33: * 如果集合中的對象資料來自資料庫,建議此方法返回該對象在資料庫中的ID
34: */
35: @Override
36: public long getItemId(int position) {
37: if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {
38: return mAudios.get(position).getId();
39: }
40: return position;
41: }
42:
43: @Override
44: public View getView(int position, View convertView, ViewGroup parent) {
45: //TODO 返回自定的View
46: }