Android Adapter的體系
在Android的API中,LIST和adapter都被放在了android.widget包內(nèi)。包內(nèi)的具體結構我這里先不展示了,主要側重列表和adapter。adapter的作用就是將要在列表內(nèi)顯示的數(shù)據(jù)和列表本身結合起來。列表本身只完成顯示的作用,其實他就是繼承自VIEWGROUP類。但是他又有一個獨特的函數(shù)就是setAdapter()就是完成了view和adapter的結合。adapter如同其本身含義,其實就是一個適配器,他可以對要顯示的數(shù)據(jù)進行統(tǒng)一的封裝,主要是將數(shù)據(jù)變成view提供給list。
我們先來看看Adapter的體系:
public interface Adapter----0層(表示繼承體系中的層次)
public interface ExpandableListAdapter---(無所謂層次因為沒有其他接口繼承實現(xiàn)它)
這是adapter的始祖,其他個性化的adapter均實現(xiàn)它并加入自己的接口。
public interface ListAdapter----1層
public interface SpinnerAdapter----1層
public interface WrapperListAdapter----2層(實現(xiàn)ListAdapter)
以上接口層面上的體系已經(jīng)完了??梢钥闯鰜碜鳛閣idgetview的橋梁adapter其實只分為2種:ListAdapter和SpinnerAdapter以及ExpandableListAdapter。也就是說所有widget也就是基于list和spinne與ExpandableList三種view形式的。
由于在實際使用時,我們需要將數(shù)據(jù)加入到Adapter,而以接口形式呈現(xiàn)的adapter無法保存數(shù)據(jù),于是Adapter就轉型為類的模式。
public abstract class BaseAdapter----2層(實現(xiàn)了ListAdapter和SpinnerAdapter)
以抽象類的形式出現(xiàn)構造了類型態(tài)下的頂層抽象,包容了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他們也是重新實現(xiàn)以上方法的。在實際的開發(fā)過程中,往往我們要自己做屬于自己的Adapter,以上方法都是需要重新實現(xiàn)的。這個在android提供的APIdemo例子中可以看到。
【編輯推薦】