學習至今,發現ListView有好幾種適配器,用法不同,各有優缺點,在此做個小總結:
1、BaseAdapter(基本適配器)
其缺點是用法比較複雜一些,但是因爲不受其他限制,所以被廣泛應用。
用法:
a、創建一個類繼承BaseAdapter,重寫它的四個方法。四個方法中,有兩個方法很少用到,必 須用到的是getView()和getCount()方法,前者返回listview的佈局對象,後者則返回listview的行數。
b、new出這個類的對象,並對listview進行設置適配器。
c、需要注意的是,當對listview中的數據進行更改時,一定不能忘記調用 notifyDataSetChanged()方法來更新設配器。
d、對代碼進行優化,常用的優化有兩個,一是行佈局複用,二是對行佈局中的空間進行封裝,如下圖:
2、CursorAdapter(遊標適配器)
當ListView中所需數據是存於數據庫時,可選用此適配器,用法相對比BaseAdapter簡單。
用法:
a、創建一個類繼承CursorAdapter,創建一個有參構造方法和重寫兩個方法newView()和 bindView(),前者創建並返回一個行佈局對象,後者對行佈局進行更新,如下圖:
b、new出該類的對象,需要兩個參數——上下文和遊標對象。遊標由數據庫對象調用query()得到。
c、對listview設置適配器。
d、需要注意的是,當listview中數據有更新時,在調用notifyDataSetChanged()方法來通知適配器之前,要先調用changeCursor()改變遊標對象。
3、SimpleCursorAdapter(簡單遊標適配器)
4、SimpleAdapter(簡單適配器)
簡單適配器所對應的listview裏面只能放以下這些控件:textview、p_w_picpathview、 繼承了CompoundButton的控件。
例子:
ArrayList<HashMap<String, String>> data = new ArrayList<HashMap<String,String>>();
for (int i = 0; i < 50; i++) {
HashMap<String, String> hasDate = new HashMap<String, String>();
hasDate.put("name", "小麗"+i);
hasDate.put("age", "23");
data.add(hasDate);
}
String[] from = new String[]{"name","age"};
int[] to = new int[]{R.id.textView1,R.id.textView2};
SimpleAdapter adapter = new SimpleAdapter(this, data , R.layout.item_list, from,
to);
listView.setAdapter(adapter);
5、ArrayAdapter
例; listView.setAdapter(new ArrayAdapter<String>
(this,android.R.layout.simple_list_item_1, strList));
第二個參數是作爲listview的行佈局,第三個參數strList是一個字符串數組,作爲listview的數據來源。
6、比較特殊的一種是當activity繼承的不是Activity,而是ListActivity時,這個activity的默認佈局就是listview,這時只要直接調用以下方法即可:
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, strList));