Android adapter概括

來源:互聯網
上載者:User

         Adapter是資料繫結到UI介面上的橋接類,Adapter負責建立顯示每個item的子View和提供對下層資料的訪問,通過它將資料填充到ListView, GridView, Gallery。Android 系統提供了幾種Adapter:ArrayAdapter<T>、 BaseAdapter、CursorAdapter、 HeaderViewListAdapter、ListAdapter、 ResourceCursorAdapter、SimpleAdapter、SimpleCursorAdapter、SpinnerAdapter、WrapperListAdapter,比較常用的有
BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。  Data、Adapter、View三者的關係如所示:    

   
         在多數情況下,不需要建立自己的Adapter,Android提供了一系列Adapter來將資料繫結到UI Widget上,如所示。因為Android負責提供資料和選擇用於顯示每個項目的View,所以Adapter能快速地修改要綁定的控制項的外觀和功能。

❑ BaseAdapter是一個抽象類別,繼承它需要實現較多的方法,所以也就具有較高的靈活性;

❑ ArrayAdapter支援泛型操作,通常需要實現getView方法,特殊情況下(結合資料row id),為了讓UI事件相應處理方便點最好重寫getItemId();  ArrayAdapter是一個綁定View到一組對象的通用類。預設情況下,ArrayAdapter綁定每個對象的toString值到在layout中預先定義的TextView控制項上。

❑ SimpleCursorAdapter可以適用於簡單的純文字型ListView,它需要Cursor的欄位和UI的id對應起來,如需要實現更複雜的UI也可以重寫其他方法。SimpleCursorAdapter綁定View到Content Provider查詢返回的遊標上。指定一個XML layout定義,然後將資料集中的每一列的值綁定到layout中的一個View上。 

1. BaseAdapter的例子

      1: /**
   2:  * 歌曲列表適配器
   3:  * 
   4:  * @version 1.0   
      5:  * @author linghu
   6:  */
   7: public class AudioListAdapter extends BaseAdapter {
   8:  
   9:     private Context mContext;
  10:  
  11:     // 歌曲集合
  12:     private ArrayList<Audio> mAudios;
  13:  
  14:     public AudioListAdapter(Context mContext, ArrayList<Audio> mAudios) {
  15:         this.mContext = mContext;
  16:         this.mAudios = mAudios;
  17:     }
  18:  
  19:     @Override
  20:     public int getCount() {
  21:         return mAudios != null ? mAudios.size() : 0;
  22:     }
  23:  
  24:     @Override
  25:     public Object getItem(int position) {
  26:         if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {
  27:             return mAudios.get(position);
  28:         }
  29:         return null;
  30:     }
  31:  
  32:     /**
  33:      * 如果集合中的對象資料來自資料庫,建議此方法返回該對象在資料庫中的ID
  34:      */
  35:     @Override
  36:     public long getItemId(int position) {
  37:         if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {
  38:             return mAudios.get(position).getId();
  39:         }
  40:         return position;
  41:     }
  42:  
  43:     @Override
  44:     public View getView(int position, View convertView, ViewGroup parent) {
  45:         //TODO 返回自定的View
  46:     }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.