android学习日记18--Adapter简介
一、Adapter
1、简述
最近学的GridView和Gallery 都有用到Adapter适配器,发现它貌似蛮重要的。专门上网搜了下有关Adapter的资料。
android绝大多数应用是JAVA语言编写的,Adapter在JAVA里是专门的一种设计模式,目的是使两个原本没有关联的类结合一起使用。
比如水管A是25mm的,水管B是40mm的,假设水管厚度不计,怎样连接两种水管一起使用?这时就需要适配器C,适配器C类似水管,
一头25mm,另一头40mm,这样就可以连接A、B水管一起使用了。
2、Android中的Adapter
Android里的Adapter是View视图与data数据之间的桥梁,Adapter提供对数据的访问,也负责为每一项数据产生一个对应的视图。下图是Data、Adapter、View三者的关系:

Andpter类结构体系:

在这些适配器中,BaseAdapter由于比较灵活用得最多,SimpleCursorAdapter貌似也挺常用的,允许绑定游标来显示数据。
3、Adapter重要方法
无论重写哪种Adapter,一般都要重写底下四个方法:
// 所表示的数据的项数
int getCount(); // 返回指定位置的数据项
Object getItem(int position); // 返回指定位置的数据项的ID
long getItemId(int position); // 为每一个数据项产生相应的视图
View getView(int position, View convertView, ViewGroup parent);
有网友查看源码发现其中getItem(),和getItemId()这两个方法对于android来讲是没有用的,单纯是为了客户端调用的方便。
就上我上一篇重写getItem()和getItemId()来设置初始position发现不起作用。
4、简单例子:
关于扩展BaseAdapter自定义的代码参考ListView、GridView、Gallery文章都有,这边不再贴出来。主要贴出如何构造一个SimpleCursorAdapter来显示联系人信息代码:
listView = new ListView(this);
// 系统里的表
Cursor cursor = getContentResolver().query(People.CONTENT_URI, null,
null, null, null); startManagingCursor(cursor); ListAdapter listAdapter = new SimpleCursorAdapter(this,//上下文
android.R.layout.simple_expandable_list_item_1,//要显示ListView的样式 cursor,// 数据源 new String[] { People.NAME },// 对应的字段 new int[] { android.R.id.text1 });// 显示哪个控件上 listView.setAdapter(listAdapter); setContentView(listView);
新增两个联系人,运行效果:

android学习日记18--Adapter简介的更多相关文章
- android学习日记22--Animation动画简介
Animation动画主要有两种:帧动画(Frame Animation)和补间动画(Tween Animation).补间动画主要包括对位置.角度.尺寸等属性的变化,而帧动画则是通过若干帧图片轮流切 ...
- android学习日记05--Activity间的跳转Intent实现
Activity间的跳转 Android中的Activity就是Android应用与用户的接口,所以了解Activity间的跳转还是必要的.在 Android 中,不同的 Activity 实例可能运 ...
- android学习日记03--常用控件Dialog
常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...
- android学习日记03--常用控件checkbox/radiobutton
常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...
- android学习日记03--常用控件button/imagebutton
常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...
- Android学习系列(18)--App工程结构搭建
本文算是一篇漫谈,谈一谈关于Android开发中工程初始化的时候如何在初期我们就能搭建一个好的架构. 关于android架构,因为手机的限制,目前我觉得也确实没什么大谈特谈的,但是从开发的 ...
- android学习日记02--Activity简介
一.Activity活动 学习Android,第一个都会接触Activity滴,Activity表示一个用户界面,是Android应用程序的入口,可以同时有多个界面,但只会显示栈顶的界面. Activ ...
- Android学习之一:Cygwin简介
为了能够一窥Android底层的东东,还是要搭建编译Android的环境.虽有Ubuntu和Suse系统,无奈总感觉在不同的系统下切来切去很是不便.在Windows工作学习,要编译Android,就不 ...
- Android学习之在Adapter中调用Fragment
•前言 在学习<第一行代码>,4.5 小节--一个简易版的新闻应用的时候: 在为 RecyclerView 创建适配器的时候: 作者直接在 NewsTitleFragment.java 中 ...
随机推荐
- UVa 1395 (最小生成树) Slim Span
题意: 规定一棵生成树的苗条度为:最大权值与最小权值之差.给出一个n个顶点m条边的图,求苗条度最小的生成树. 分析: 按照边的权值排序,枚举边集的连续区间[L, R]的左边界L,如果这些区间刚好满足一 ...
- POJ 2728 Desert King ★(01分数规划介绍 && 应用の最优比率生成树)
[题意]每条路径有一个 cost 和 dist,求图中 sigma(cost) / sigma(dist) 最小的生成树. 标准的最优比率生成树,楼教主当年开场随手1YES然后把别人带错方向的题Orz ...
- oracle 导入导出数据
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中.利用 ...
- alibaba笔试1
5.D 一个线程不可以改变另一个线程的程序计数器.如果改变了,线程在切换后就恢复不到正确的位置. 一个线程可以访问另一个线程的栈.http://bbs.csdn.net/topics/39008942 ...
- P2158 [SDOI2008]仪仗队 线性筛(欧拉函数和素数表)
上三角行恰好是[1,n-1]的欧拉函数 http://www.luogu.org/problem/show?pid=2158#sub //#pragma comment(linker, "/ ...
- 稀疏表示(sparse representation)和字典学习
近十几年来,稀疏(sparsity)已经成为信号处理及其应用领域中处于第一位的概念之一.近来,研究人员又致力于过完备(overcomplete)信号表示的研究.这种表示不同于许多传统的表示.因为它能提 ...
- MySQL UNION 与 UNION ALL 语法与用法
MySQL UNION 语法 MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中.语法为: SELECT column,... FROM table1 UNION [ ...
- HW5.34
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- CF390-E. Inna and Large Sweet Matrix(区间更新+区间查询)
题意很好理解,不说了 题解就是每次把值压缩成一维,比如x上,这样就可以求出任意宽度的整个竖条的和. 如这张图,求的是s5-(s1+s3+s7+s9) 因为可以求出一整竖条和一整横条,我们可以求出是s2 ...
- RecyclerView设置verticalSapcing等
RecyclerView没有像GridView那样有提供verticalSpacing属性,上StackOverflow找到了一种替代方法,代码如下 public class SpacesItemDe ...