Android适配器

一.适配器
适配器是AdapterView视图(如ListView - 列表视图控件、Gallery - 缩略图浏览器控件、GridView - 网格控件、Spinner - 下拉列表控件、AutoCompleteTextView - 自动提示文本框、ExpandableListView - 支持展开/收缩功能的列表控件等)与数据之间的桥梁,用来处理数据并将数据绑定到AdapterView上。
这也是MVC模式的集中体现。其中M代表数据源或者说是数据库内的数据,V代表View视图,而C代表的就是适配器部分,进行数据和视图之间的维护。
其实适配器它也是一个类,在类里面它实现了父类的这几个方法:publicint getCount() //得到数据的行数public Object getItem(int position)//根据position得到某一行的记录public long getItemId(int position)//得到某一条记录的ID
android提供多种适配器,开发时可以针对数据源的不同采用最方便的适配器,也可以自定义适配器完成复杂功能。
补充:
AdapterView对象有两个主要任务 1. 在布局中显示数据 2. 处理用户的选择
BaseAdapter一般的适配器基类可用于将数据绑定到listview、Gallery、GridView 、spinner、AutoCompleteTextView上,当然也可以绑定到ExpandableListView上BaseExpandableListAdapter可扩展的适配器基类可用于将数据绑定到支持展开/收缩功能的列表控件ExpandableListView上,ExpandableListView继承自ListView
二.两种适配器基类的相关类图与继承关系
1>BaseAdapter适配器相关类图:图1和图2


图1 BaseAdapter适配器相关类图
图2 BaseAdapter适配器相关类图(续)

2>BaseExpandableListAdapter适配器相关类图:图3


图3 BaseExpandableListAdapter适配器相关类图

三.重要类的相关方法构造函数的具体分析
1.ArrayAdapter


构造函数

补充:
1>数据源写法对比
1.用静态字符数组常量来给ArrayAdapter 赋值。 优点,直接用数组写入,数据量大建议使用。
static final String[] list="...";
ArrayAdapter arrayAdapter = new ArrayAdapter(this,R.layout.list_item,list);
2.在程序中给ArrayAdapter 赋值。优点:可以在程序中灵活写入。
ArrayList list = new ArrayList();
list.add("数据1");
list.add("数据N");
ArrayAdapter arrayAdapter = new ArrayAdapter(this,R.layout.list_item,list);
3.使用国际化接口 字符数组来 给ArrayAdapter 赋值。优点:提供的组件的选项可以国际化。
目录【res】→【values】→【strings.xml】添加
  A  B  C  D
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,R.array.letter,android.R.layout.my_list_item)//只需要显示
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.my_list_item,Arrays.asList(getResources().getTextArray(R.array.letter)))//允许动态增删
2>什么情况使用ArrayAdapter,什么时候使用BaseAdapter
当数量较多,比如超过100条或频繁动态增减时使用arrayadapter可以方便控制ui,
如果仅仅为了显示则使用baseadapter更节省资源
2.SimpleCursorAdapter
SimpleCursorAdapter一般主要用于数据库,它的数据来源一般都是数据库查询得到的Cursor 我们来看下面的例子:

String uriString = “content://contacts/people/”;                     
Cursor myCursor =managedQuery(Uri.parse(uriString), null, null, null, null);
String[] fromColumns = new String[]{People.NUMBER, People.NAME};
 int[] toLayoutIDs = new int[] {R.id.nameTextView, R.id.numberTextView};                   
SimpleCursorAdapter myAdapter;                 
myAdapter=newSimpleCursorAdapter(this,R.layout.simplecursorlayout,myCursor,fromColumns,toLayoutIDs);
//传入当前的上下文、一个layout资源,一个游标和两个数组:
//一个包含使用的列的名字,另一个(相同大小)数组包含View中的资源ID,
//用于显示相应列的数据值。      
             
myListView.setAdapter(myAdapter);

我们把一个游标绑定到了ListView上,并使用自定义的layout显示来显示每一个Item。

四.自定义适配器。
当我们想用一些其它的展现方式,或者是我们需要的,呈现方式,这是就得DIY了。首先我们定义一个类让它继承自BaseAdapter,再让它实现一里面所说的那几个方法。那么这个自定义适配器就算好了。里面的一些方法我在上面都介绍过了,在这就不在赘述了。

public class ImageAdapter extends BaseAdapter {                                        
private Context mcontext;                                                 
 };                                       
//构造函数里面有两个参数,一个是数据的来源,另一个是上下文。                       
 public ImageAdapter(Integer[] imgIds,Context c){                                        
mcontext=c;                                       
imageIds=imgIds;                                 
}                        
public int getCount() {                                 
// TODO Auto-generated method stub                                
return imageIds.length;                                 
 }                          
public Object getItem(int position) {                                   
// TODO Auto-generated method stub                                  
return null;                                   
}                          
public long getItemId(int position) {                                 
// TODO Auto-generated method stub                               
return position;                                 
}                           
//主要工作是做在这里,可以自定义布局,在这里我就不多说了                         
public View getView(int position, View convertView, ViewGroup parent) {                            
// TODO Auto-generated method stub                                     
ImageView imageview = newImageView(mcontext);                                    
imageview.setImageResource(imageIds[position]);                                     
imageview.setLayoutParams(newGallery.LayoutParams(120,120));                                    
imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);                                     
return imageview;                                  
 }                
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 适配器模式对于Android开发者来说,简直太熟悉不过了。许多应用在直接或者间接的用到适配器模式。 ListVie...
    博为峰51Code教研组阅读 310评论 0 0
  • 初识Android时,我对ListView、GradView中的Adapter一直半懂非懂,每次写Adapter都...
    blink_dagger阅读 5,956评论 4 10
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,837评论 25 707
  • №.1 本书导语 本书分为三大部分: 第一部分,是向内看(Looking in),主要关注和自我有关的沟通因素,包...
    四季海棠花阅读 252评论 0 0
  • 到底要不要给小孩子讲道理,本来是一个无需讨论的问题。但在很多家庭里,小孩子是无需讲道理的,等到长大了他自然会明白。...
    Turning阅读 1,492评论 2 5