在android開發中列表的使用是十分常見的。google對列表的封裝使列表既有顯示傳統文本列表的能力,也有加入了諸如選擇項、複選項等處理事件的能力。這裏寫一些我這幾天對這個問題的理解。
在android的api中,LIST和adapter都被放在了android.widget包內。包內的具體結構我這裏先不展現了,主要側重列表和adapter。adapter的做用就是將要在列表內顯示的數據和列表自己結合起來。列表自己只完成顯示的做用,其實他就是繼承自VIEWGROUP類。可是他又有一個獨特的函數就是setAdapter()就是完成了view和adapter的結合。adapter如同其自己含義,其實就是一個適配器,他能夠對要顯示的數據進行統一的封裝,主要是將數據變成view提供給list。
咱們先來看看adapter的體系:
public interface Adapter----0層(表示繼承體系中的層次)
public interface ExpandableListAdapter---(無所謂層次由於沒有其餘接口繼承實現它)
這是adapter的始祖,其餘個性化的adapter均實現它並加入本身的接口。
public interface ListAdapter----1層
public interface SpinnerAdapter----1層
public interface WrapperListAdapter----2層(實現ListAdapter)
以上接口層面上的體系已經完了。能夠看出來做爲widgetview的橋樑adapter其實只分爲2種:ListAdapter和SpinnerAdapter以及ExpandableListAdapter。也就是說全部widget也就是基於list和spinne與ExpandableList三種view形式的。
因爲在實際使用時,咱們須要將數據加入到Adapter,而以接口形式呈現的adapter沒法保存數據,因而Adapter就轉型爲類的模式。
public abstract class BaseAdapter----2層(實現了ListAdapter和SpinnerAdapter)
以抽象類的形式出現構造了類型態下的頂層抽象,包容了List和Spinner
public class ArrayAdapter----3層
public class SimpleAdapter---3層
public class CursorAdapter----3層(CursorAdapter其後還有子類這裏先不探討)
基本體系有了以後,讓咱們看看頂層Adapter裏有哪些方法(只列舉經常使用的):
abstract Object getItem(int position)
abstract int getCount()
abstract long getItemId(int position)
abstract int getItemViewType(int position)
abstract View getView(int position,View convertVeiw,ViewGroup parent)
以上是比較重要的方法,ArrayAdapter他們也是從新實現以上方法的。在實際的開發過程當中,每每咱們要本身作屬於本身的Adapter,以上方法都是須要從新實現的。這個在android提供的APIdemo例子中能夠看到。android