Adapter在Android中占据一个重要的角色,它是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如图1直观的表达了Data、Adapter、View三者的关系。

Android开发——说说Adapter那点事_第1张图片

图1 Adapter、数据、UI三者关系(PS:此图来自Google I/O)

一、Android中Adapter

 

Android开发——说说Adapter那点事_第2张图片

图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 mAudios;
  13:  
  14:     public AudioListAdapter(Context mContext, ArrayList 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:     }

更多相关文章

  1. Android中SQLite应用详解(sql访问数据库)
  2. Android LayoutInflater inflate方法效率
  3. 下载Android Sdk源码方法
  4. android在布局中动态增加view时的层级控制
  5. Android基础入门教程——7.2.1 Android XML数据解析
  6. Android之JSON格式数据解析

随机推荐

  1. Android Studio升级后 出现在No subject
  2. android 判断是wifi还是4g网络
  3. Android存储空间不足
  4. DownloadError: android.googlesource.co
  5. Android:Duplicate class inxmlbeans-2.6.
  6. android资源文件详细介绍
  7. 豆微下载
  8. Android 遍历文件夹下的所有文件
  9. android 自定义控件实现波浪效果(八)
  10. Android - 使用 Kotlin 和 Room 进行开发