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