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. [SAP ABAP开发技术总结]搜索帮助Search Help (F4)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  2. 生产者-消费者 用非阻塞队列、Object.wait()、Object.notify()实现

    非阻塞队列,需要考虑到: 1.并发中的同步 2.线程间通信 public class Quene_Pro_Con { //定义队列大小 private static int size = 10; // ...

  3. 3.27考试总结(hnoi难度)

    1 duel1.1 DescriptionK·⁄¶("“uƒ¢y%¥§H5|+ (?1’m" ’m·ø?1§z<k§⁄k<⁄§lm?0,1,2...§zg ‹‰ª«mS ...

  4. [转]产品需求文档(PRD)的写作

    产品需求对产品研发而言非常重要,写不好需求,后面的一切工作流程与活动都会受到影响.转载一篇文章,关于产品需求文档写作方面的,如下: 本文摘自(一个挺棒的医学方面专家):http://www.cnblo ...

  5. 关于Docker在测试方面的应用

    Docker 火了很长一段时间了,前段时间简单的学习和试玩了一下子,发现他对测试很有价值,觉得有必要再次深入研究. 这里标记一些较好的学习网址,用作参考: InfoQ上面有系列的文章: 深入浅出Doc ...

  6. FLASH CC 2015 CANVAS (七)总结

    FLASH CC 2015 CANVAS (一至七)确切来说是自己在摸索学习过程中而写.所以定为“开荒教程”. 去年年底转战H5,半年中一直非常忙也不敢用CC来做项目,担心有BUG或者无法实现需求,所 ...

  7. iOS - UIDevice

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIDevice : NSObject @available(iOS 2.0, *) public class UI ...

  8. 常用sql(转)

    1增 1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values ('开心 ...

  9. python接口的调用方法

    第一个图灵机器人接口实例: #!/usr/bin/env python # -*- coding: utf_8 -*- import urllib2,urllib import json import ...

  10. hdu 2063 过山车(二分图最佳匹配)

    经典的二分图最大匹配问题,因为匈牙利算法我还没有认真去看过,想先试试下网络流的做法,即对所有女生增加一个超级源,对所有男生增加一个超级汇,然后按照题意的匹配由女生向男生连一条边,跑一个最大流就是答案( ...