Android中的Adapter詳解

Adapter介紹

Android是完全遵循MVC模式設計的框架,Activity是Controller,layout是View
因爲layout五花八門,很多數據都不能直接綁定上去,所以Android引入了Adapter這個機制作爲複雜數據的展示的轉換載體,所以各種Adapter只不過是轉換的方式和能力不一樣而已。
幾種常用的Adapter:



其中BaseAdapter的直接子類:
ArrayAdapter<T>, CursorAdapter, SimpleAdapter

BaseAdapter的間接子類:
ResourceCursorAdapter, SimpleCursorAdapter

Adapter是將數據綁定到UI界面上的橋接類。Adapter負責創建顯示每個項目的子View和提供對下層數據的訪問。
在多數情況下,你不需要創建自己的Adapter。Android提供了一系列Adapter來將數據綁定到UI Widget上。

因爲Android負責提供數據和選擇用於顯示每個項目的View,所以Adapter能快速地修改要綁定的控件的外觀和功能。

下面的列表顯示了兩個最有用和最通用的本地Adapter:

❑ ArrayAdapter
ArrayAdapter是一個綁定View到一組對象的通用類。默認情況下,ArrayAdapter綁定每個對象的toString值到在layout中預先定義的TextView控件上。可變通的,構造函數允許你使用更加複雜的layout或者通過重寫getView方法來擴展類從而使用TextView的替代物(如ImageView或嵌套的layout)。

❑ SimpleCursorAdapter
SimpleCursorAdapter綁定View到Content Provider查詢返回的遊標上。指定一個XML layout定義,然後將數據集中的每一列的值綁定到layout中的一個View上。

使用Adapter進行數據綁定:

將Adapter應用到繼承自AdapterView類上,你需要調用View的setAdapter方法,傳入一個Adapter實例,如下面的片段所示:

  1. ArrayList<String> myStringArray = new ArrayList<String>();  
  2.   
  3. ArrayAdapter<String> myAdapterInstance;  
  4.   
  5. int layoutID = android.R.layout.simple_list_item_1;  
  6.   
  7. myAdapterInstance = new ArrayAdapter<String>(this, layoutID, myStringArray);  
  8.   
  9. myListView.setAdapter(myAdapterInstance);  


 

這個片段顯示了最簡單的情況,將數組中的字符串綁定到ListView中用於顯示每個項目的簡單TextView控件上。

Adapter中的體系結構:

在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)

以上接口層面上的體系已經完了。可以看出來作爲widget view的橋樑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,以上方法都是需要重新實現的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章