免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1740 | 回复: 2
打印 上一主题 下一主题

android adapter 基础 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-12 23:05 |只看该作者 |倒序浏览
android adapter 基础









Android开发——说说Adapter那点事
转载  http://www.cnblogs.com/halzhang/archive/2010/11/28/1890637.html

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





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

一、Android中Adapter


[img][/img]


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.    1: /**

  2.    2:  * 歌曲列表适配器

  3.    3:  *

  4.    4:  * @version 2010-11-24 下午05:13:33

  5.    5:  * @author Hal

  6.    6:  */

  7.    7: public class AudioListAdapter extends BaseAdapter {

  8.    8:  

  9.    9:     private Context mContext;

  10.   10:  

  11.   11:     // 歌曲集合

  12.   12:     private ArrayList<Audio> mAudios;

  13.   13:  

  14.   14:     public AudioListAdapter(Context mContext, ArrayList<Audio> mAudios) {

  15.   15:         this.mContext = mContext;

  16.   16:         this.mAudios = mAudios;

  17.   17:     }

  18.   18:  

  19.   19:     @Override

  20.   20:     public int getCount() {

  21.   21:         return mAudios != null ? mAudios.size() : 0;

  22.   22:     }

  23.   23:  

  24.   24:     @Override

  25.   25:     public Object getItem(int position) {

  26.   26:         if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {

  27.   27:             return mAudios.get(position);

  28.   28:         }

  29.   29:         return null;

  30.   30:     }

  31.   31:  

  32.   32:     /**

  33.   33:      * 如果集合中的对象数据来自数据库,建议此方法返回该对象在数据库中的ID

  34.   34:      */

  35.   35:     @Override

  36.   36:     public long getItemId(int position) {

  37.   37:         if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {

  38.   38:             return mAudios.get(position).getId();

  39.   39:         }

  40.   40:         return position;

  41.   41:     }

  42.   42:  

  43.   43:     @Override

  44.   44:     public View getView(int position, View convertView, ViewGroup parent) {

  45.   45:         //TODO 返回自定的View

  46.   46:     }
复制代码

1.jpg (30.91 KB, 下载次数: 18)

1.jpg

2.png (46.54 KB, 下载次数: 16)

2.png

论坛徽章:
0
2 [报告]
发表于 2011-12-23 21:53 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2011-12-23 21:54 |只看该作者
谢谢分享  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP