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

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android(安卓)-Intent -ACTION_
  3. Android(安卓)Jetpack 最佳开发姿势
  4. 【Android】理解Service和BroadcastReceiver
  5. drawable 下 selector 状态
  6. android开发之ClipboardManager(剪贴板管理器)
  7. Android数据库更新并保留原来数据的实现
  8. Android系统源码数据库(mmssms.db)中几个表之间的关系.
  9. Android实现数据存储5种技术

随机推荐

  1. Android(安卓)M新特性Doze and App Stand
  2. Android(安卓)Camera 运行流程
  3. 将Gsensor lis301 driver 升级到 lis331
  4. [置顶] Android中一些优秀的博文(看过的)
  5. 在android中读取联系人信息的程序,包括读
  6. 让组件悬浮所有页面之上
  7. Android(安卓)炫酷的自定义进度条Progres
  8. Android(安卓)源码的建造者模式
  9. android 玩愤怒的小鸟等游戏的时候全屏TP
  10. Js Android(安卓)交互