一、Adapter
1、簡述
最近學的GridView和Gallery 都有用到Adapter適配器,發現它貌似蠻重要的。專門上網搜了下有關Adapter的資料。
android絕大多數應用是JAVA語言編寫的,Adapter在JAVA裡是專門的一種設計模式,目的是使兩個原本沒有關聯的類結合一起使用。
比如水管A是25mm的,水管B是40mm的,假設水管厚度不計,怎樣連接兩種水管一起使用?這時就需要適配器C,適配器C類似水管,
一頭25mm,另一頭40mm,這樣就可以連接A、B水管一起使用了。
2、Android中的Adapter
Android裡的Adapter是View視圖與data數據之間的橋梁,Adapter提供對數據的訪問,也負責為每一項數據產生一個對應的視圖。下圖是Data、Adapter、View三者的關系:
Andpter類結構體系:
在這些適配器中,BaseAdapter由於比較靈活用得最多,SimpleCursorAdapter貌似也挺常用的,允許綁定游標來顯示數據。
3、Adapter重要方法
無論重寫哪種Adapter,一般都要重寫底下四個方法:
1 // 所表示的數據的項數
2 int getCount();
3
4 // 返回指定位置的數據項
5 Object getItem(int position);
6
7 // 返回指定位置的數據項的ID
8 long getItemId(int position);
9
10 // 為每一個數據項產生相應的視圖
11 View getView(int position, View convertView, ViewGroup parent);
有網友查看源碼發現其中getItem(),和getItemId()這兩個方法對於android來講是沒有用的,單純是為了客戶端調用的方便。
就上我上一篇重寫getItem()和getItemId()來設置初始position發現不起作用。
4、簡單例子:
關於擴展BaseAdapter自定義的代碼參考ListView、GridView、Gallery文章都有,這邊不再貼出來。主要貼出如何構造一個SimpleCursorAdapter來顯示聯系人信息代碼:
1 listView = new ListView(this);
2 // 系統裡的表
3 Cursor cursor = getContentResolver().query(People.CONTENT_URI, null,
4 null, null, null);
5
6 startManagingCursor(cursor);
7
8 ListAdapter listAdapter = new SimpleCursorAdapter(this,//上下文
9 android.R.layout.simple_expandable_list_item_1,//要顯示ListView的樣式
10
11 cursor,// 數據源
12
13 new String[] { People.NAME },// 對應的字段
14
15 new int[] { android.R.id.text1 });// 顯示哪個控件上
16
17 listView.setAdapter(listAdapter);
18
19 setContentView(listView);