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:
     }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stoneson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值