Adapter是连接后端数据和前端显示的桥梁,是数据和UI(View)之间的纽带。
    在常见的View(ListView,GridView)等地方都需要用到Adapter。数据、Adapter和View之间的关系如下:
    常见的适配器有以下几种:
  • BaseAdapter:是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
  • SimpleAdapter:有最好的扩充性,可以自定义出各种效果。
  • ArrayAdapter:支持泛型操作,最为简单,只能展示一行字。
  • SimpleCursorAdapter:可以适用于简单的纯文字型ListView,也可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
    从源码上分析,其它类都是继承了BaseAdapter类,继承该类可以实现的功能最丰富,继承它需要实现以下四个方法:
  • getCount():得到数据的行数,也可以控制item的数量
  • getItem(int position):根据positon得到某一行的记录
  • getItemId(int postion):得到某一条记录的ID
  • getView(int position, View cnverView, ViewGroup parent):最重要的一个方法,重点介绍。功能是定义适配器以什么样的方式显示我们填充的数据,参数介绍如下,
    position表示将显示的是第几行,converView是从布局文件(List中item的布局)中inflate来的,parent表示此视图最终会被附加到的父级视图。经典示例如下:
        public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater)MyListView.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.item, null);
TextView title = (TextView)itemView.findViewById(R.id.itemTitle);
title.setText(itemTitles[position]);
return itemView;
} else {
TextView title = (TextView)convertView.findViewById(R.id.itemTitle);
title.setText(itemTitles[position]);
return convertView;
}
}

通过视图缓存机制优化,适配器的完整代码如下:

public class ViewHolderAdapter extends BaseAdapter {
private List<String> mData;
private LayoutInflater mInflater; public ViewHolderAdapter(Context context, List<String> data){
this.mData=data;
mInflater=LayoutInflater.from(context);
} @Override
public int getCount() {
// TODO Auto-generated method stub,控制只显示3个item
return mData.size() > 3 : 3 : mData.size;
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return mData.get(position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} public final class ViewHolder{
public ImageView img;
public TextView title;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder=null;
if(convertView==null){
holder=new ViewHolder(); convertView=mInflater.inflate(R.layout.viewholder_item,null);//填充自定义item
holder.img=(ImageView)convertView.findViewById(R.id.imageView);
holder.title=(TextView)convertView.findViewById(R.id.textView);
convertView.setTag(holder);
}else{
//通过Tag找到缓存的布局
holder=(ViewHolder)convertView.getTag();
} holder.img.setBackgroundResource(R.drawable.one);
holder.title.setText(mData.get(position)); return convertView;
} }

最后在MainActivity中显示

public class MainActivity extends Activity {
private List<String> mData;
private ViewHolderAdapter adapter;
private ListView listview; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView) findViewById(R.id.listview);
mData=new ArrayList<String>();
for(int i=0;i<120;i++){
mData.add(""+i);
} adapter=new ViewHolderAdapter(this,mData);
listview.setAdapter(adapter); }
}

程序猿必读

Android 适配器的更多相关文章

  1. android 适配器simpleadapter和baseadapter区别

    android 适配器 simpleadapter 和 baseadapter 设计网络程序或者数据处理显示程序的时候,常常会使用 simpleadapter 和baseadapter 来实现. ad ...

  2. android 适配器 ArrayAdapter,SimpleAdapter的学习

    今天认真看了下android适配器,学习了下它的使用方法. 一,ArrayAdapter ArrayAdapter 比较简单,只可以存放一行文本信息.下面是简单的实现 private ListView ...

  3. Android适配器

    Android适配器 安卓的适配器在我看来是一个非常重要的知识点,面对形式相同但数据源较多的情况时,适配器是一个比较好的解决方法.数据适配器是建立了数据源与控件之间的适配关系,将数据源转换为控件能够显 ...

  4. android适配器及监听点击和滚动在ListView中的使用

    package com.example.demon08; import java.util.ArrayList;import java.util.HashMap;import java.util.Li ...

  5. Android适配器Adapter学习

    在开发中我们需要绑定一些数据展现到桌面上,这是就需要AdapterView.AdapterView是ViewGroup的子类,它决定了怎么展现视图通过Adapter来绑定特殊的数据类型. Adapte ...

  6. android 适配器 BaseAdapter 的学习

    昨天晚上看了下ArrayAdapter,和SimpleAdapter,今天早上起来看完了球赛,又继续要开始学习了,适配器除了前面的两种,还有一种常用的就是BaseAdapter,他是一个抽象类.事实上 ...

  7. android适配器Adapter

    一.什么是适配器,适配器有什么用? 适配器是AdapterView视图(如ListView - 列表视图控件.Gallery - 缩略图浏览器控件.GridView - 网格控件.Spinner - ...

  8. Android适配器Adapter的学习

    Android中有很多的适配器,首先看看这些适配器的继承结构 这些适配器中,BaseAdapter用的最多,也用的最熟,先放过他,从ArrayAdapter开始 一个listAdapter用来管理一个 ...

  9. Android 适配器 自定义

    前言:最近看了几个开源项目,发现适配器这东西用的很多,一开始觉得这东西高大上,其实呢,感觉就是一个中转站,或者说是一个接口工具,将数据填充到一个视图中,几乎任何项目都会涉及到.所以今天也简单看了一下, ...

  10. Android 适配器教程 (六)

    我们的适配器学习已经接近尾声了.尽管这不是一个大问题,可是确实是值得学习的一块知识,回忆一下之前五讲的知识.我们已经学到了非常多东西了. 在之前五讲中.我们已经由浅入深的认识了适配器,从最简单的Lis ...

随机推荐

  1. uploads 上传图片

    public static function upFile($r,$p='../images/link/',$type='gif,jpg,png',$named=0){ $newnames = nul ...

  2. java中判断用户是否为第一次登陆(在页面上进行控制)

    <%@ page language="java" import="java.util.*" pageEncoding="gbk"%&g ...

  3. [转载] 淘宝内部分享:怎么跳出MySQL的10个大坑(上)

    原文: http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=209773318&idx=1&sn=e9600d3db80b ...

  4. linux之echo命令

    linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法 echo命令的功能是在显示器上显示一段文字,一般起到一个提示 ...

  5. 【Todo】用python进行机器学习数据模拟及逻辑回归实验

    参考了这个网页:http://blog.csdn.net/han_xiaoyang/article/details/49123419 数据用了 https://pan.baidu.com/s/1pKx ...

  6. js 重点 (转载)

  7. vi编辑器简单应用(摘抄)

    摘抄于 vi编辑器的使用 (2) (3) 1 vi编辑器的基本使用 1.1 vi的启动 打开: $ vi example.c 只读打开 $ vi –R example.c 1.2 vi的工作模式 1. ...

  8. eclipse js卡顿

    http://blog.csdn.net/zhangzikui/article/details/24805935

  9. commonJS — 字符串操作(for String)

    for String github: https://github.com/laixiangran/commonJS/blob/master/src/forString.js 代码 /** * Cre ...

  10. azure git 托管

    azure git上传部署步骤:(首次提交)cd 至本地代码路径git initgit add .git commit –m "initial commit"git remote ...