適配ListView的幾種常見Adapter的用法總結
阿新 • • 發佈:2019-01-02
1. BaseAdapter
(1)用法
它是所有Adapter的父類,是一個通用的基礎Adapter,繼承它時必須複寫四個方法 :getCount(), getItem(), getItemId()和getView。
(2)優點
可以實現幾乎所有功能。自由性更高。可以實現帶有Button控制元件的ListView。
(3)缺點
由於它是一個抽象類,在繼承它時時需要複寫四個方法,繁瑣。
(4)建構函式
BaseAdapter() ,一般根據需要,自己複寫建構函式。
(5)重要知識點
在ListView的使用中,有時候還需要在裡面加入Button等控制元件,實現單獨的操作。也就是說,這個ListView不再只是展示資料,也不僅僅是這一行要來處理使用者的操作,而是裡面的控制元件要獲得使用者的焦點。我們可以試試用SimpleAdapter新增一個Button到ListView的條目中,會發現可以新增,但是卻無法獲得焦點,點選操作被ListView的Item所覆蓋,,無法響應Button點選事件。這時候最方便的方法就是使用靈活的介面卡BaseAdapter了。
2. ArrayAdapter
(1)用法
用來繫結一個數組,支援泛型操作。一般需要根據情況複寫getView()方法。
(2)優點
使用簡單
(3)缺點
只能處理簡單的文字,或者帶固定影象的文字
(4)建構函式
ArrayAdapter(Context context, int textViewResourceId, List<T> objects) 第一個引數: 當前Context例項 第二個引數:必須包含TextView控制元件的子佈局檔案 第三個引數:資料來源
(5)簡單舉例:只顯示文字的ListView
public class MyListView extends Activity { private ListView listView; //private List<String> data = new ArrayList<String>(); @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); listView = new ListView(this); listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData())); setContentView(listView); } private List<String> getData(){ List<String> data = new ArrayList<String>(); data.add("Apple"); data.add("Banana"); data.add("Grape"); data.add("Watermelon"); return data; } }
3. SimpleAdapter
(1)用法
一般實現它的Activity可以直接繼承ListActivity, 它和Activity沒有太大區別,只是對顯示ListView做了優化而已。無需複寫getView()方法
(2)優點
擴充套件性最好,可以定義各種各樣的佈局出來,可以放上ImageView(圖片),還可以放上Button(按鈕),CheckBox(複選框)等等;
(3)缺點
資料來源複雜。simpleAdapter的資料來源用一般都是HashMap構成的List,list的每一節對應ListView的每一item;
(4)建構函式
SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to);
引數context:系統上下文環境; 引數data:由HashMap組成的List,也就是資料來源; 引數resource:ListView的子佈局檔案(R.layout.item_list_view); 引數from:HashMap中的key; 引數to: HashMap中key對應的value要顯示在佈局中的位置的資源id