Android開發——說說Adapter那點事

dearbaba_8520發表於2018-08-09
原文地址為:Android開發——說說Adapter那點事

Adapter在Android中佔據一個重要的角色,它是資料和UI(View)之間一個重要的紐帶。在常見的View(ListView,GridView)等地方都需要用到Adapter。如圖1直觀的表達了Data、Adapter、View三者的關係。

未命名

圖1 Adapter、資料、UI三者關係(PS:此圖來自Google I/O)

一、Android中Adapter

 

Android-Adapter

圖2:Android中Adapter型別層級圖

由圖2我們可以看到在Android中與Adapter有關的所有介面、類的完整層級圖。在我們使用過程中可以根據自己的需求實現介面或者繼承類進行一定的擴充套件。比較常用的有 BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。

  • BaseAdapter是一個抽象類,繼承它需要實現較多的方法,所以也就具有較高的靈活性;
  • ArrayAdapter支援泛型操作,通常需要實現getView方法,特殊情況下(結合資料row id),為了讓ui事件相應處理方便點最好重寫getItemId;
  • SimpleCursorAdapter可以適用於簡單的純文字型ListView,它需要Cursor的欄位和UI的id對應起來。如需要實現更復雜的UI也可以重寫其他方法。

二、一個繼承BaseAdapter的類的程式碼段

   1: /**
   2:  * 歌曲列表介面卡
   3:  * 
   4:  * @version 2010-11-24 下午05:13:33
   5:  * @author Hal
   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:     }

歡迎交流討論:ghanguo@gmail.com

--------------------EOF---------------------


轉載請註明本文地址:Android開發——說說Adapter那點事

相關文章