摘自:http://blog.csdn.net/shakespeare001/article/details/7926783

Adapter是连接后端数据和前端显示的适配器接口,是数据Data和UI(视图View)之间一个重要的纽带。

下图表达了数据Data、适配器Adapter、UI视图View三者之间的紧密关系。

注意:当数据发生改变时都要用Adater调用自己notifyDataSetChanged()方法来通知UI视图View

重新刷新界面展示新的数据源。

收藏ArrayAdapter、SimpleAdapter和BaseAdapter的一些简短代码片段,希望用时方便想起其用法。

1.ArrayAdapter

只可以简单的显示一行文本

代码片段:

  1. ArrayAdapter<String> adapter = new ArrayAdapter<String>(
  2. this,
  3. R.layout.item,//只能有一个定义了id的TextView
  4. data);//data既可以是数组,也可以是List集合

另外 onItemClick(AdapterView<?> parent, View view, int position, long id)

参数介绍如下:

parent:被单击的ListView对象

view:被单击的那一项

position:被单击的那一项在ListView中的位置

id:被选中的那一行的id

ArrayAdapter三种适配器样式:

1 多选ListView的item条目: android.R.layout.simple_list_item_multiple_choice

2 单选ListView的item条目: android.R.layout.simple_list_item_single_choice

3 全选ListView的item条目: android.R.layout.simlple_list_item_checked

2.SimpleAdapter

可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在java代码中加工),
也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。

代码片段:

  1. List<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;
  2. for(int i =0; i < lengh; i++) {
  3. Map<String,Object> item = new HashMap<String,Object>();
  4. item.put("image", R.drawable.portrait);
  5. item.put("title", mListTitle[i]);
  6. item.put("text", mListStr[i]);
  7. mData.add(item);
  8. }
  9. SimpleAdapter adapter = new SimpleAdapter(
  10. this,            --是上下文对象
  11. mData,        --mData是基于Map的List,这个Map集合包含了ListView每一个item视图需要的数据
  12. R.layout.item,    --是ListView每一个item条目样式的视图布局
  13. new String[]{"image","title","text"},        --是一个名称的数组,每个名称是为了在ArrayList中的每个索引Map的key的名称
  14. new int[]{R.id.image,R.id.title,R.id.text});     --是一个用于显示ListView中的每一个item条目样式的视图的id的数组。

3.BaseAdapter

可以实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类,
正是由于继承了该类,需要我们重写一些方法,让我们可以在代码里控制列表的样式,更加灵活。

继承BaseAdapter,要覆写getView()方法,此方法返回一个ListView每个item的视图View

代码片段:

    1. private class MyListAdapter extends BaseAdapter{
    2. private Context mContext;
    3. private int[] colors=new int[]{0xff626569,0xff4f5257 };
    4. public MyListAdapter(Context context){
    5. mContext=context;
    6. }
    7. @Override
    8. public int getCount() {
    9. // TODO Auto-generated method stub
    10. return mListText.length;
    11. }
    12. @Override
    13. public Object getItem(int position) {
    14. // TODO Auto-generated method stub
    15. return position;
    16. }
    17. @Override
    18. public long getItemId(int position) {
    19. // TODO Auto-generated method stub
    20. return position;
    21. }
    22. @Override
    23. public View getView(int position, View convertView, ViewGroup parent) {
    24. ImageView image=null;  //这些控件可以单独封装成一个类(Holder),便与优化
    25. TextView title=null;
    26. TextView  content=null;
    27. if(convertView==null){
    28. convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);
    29. image=(ImageView) convertView.findViewById(R.id.color_image);
    30. title=(TextView) convertView.findViewById(R.id.color_title);
    31. content=(TextView) convertView.findViewById(R.id.color_text);
    32. }
    33. int colorPos=position%colors.length;
    34. convertView.setBackgroundColor(colors[colorPos]);
    35. title.setText(mListTitle[position]);
    36. content.setText(mListText[position]);
    37. image.setImageResource(R.drawable.portrait);
    38. return convertView;
    39. }
    40. }
    41. --------------------------下面样例列表页的控件单独封装成了一个类(Holder),便与优化-----
    42. public class MyBaseAdapter extends BaseAdapter{
    43. private LayoutInflater mInflater;
    44. public MyAdapter(Context context){
    45. this.mInflater = LayoutInflater.from(context);
    46. }
    47. @Override
    48. public int getCount() {
    49. // TODO Auto-generated method stub
    50. return mData.size();
    51. }
    52. @Override
    53. public Object getItem(int arg0) {
    54. // TODO Auto-generated method stub
    55. return null;
    56. }
    57. @Override
    58. public long getItemId(int arg0) {
    59. // TODO Auto-generated method stub
    60. return 0;
    61. }
    62. @Override
    63. public View getView(int position, View convertView, ViewGroup parent) {
    64. ViewHolder holder = null;
    65. if (convertView == null) {
    66. holder=new ViewHolder();
    67. convertView = mInflater.inflate(R.layout.vlist2, null);
    68. holder.img = (ImageView)convertView.findViewById(R.id.img);
    69. holder.title = (TextView)convertView.findViewById(R.id.title);
    70. holder.info = (TextView)convertView.findViewById(R.id.info);
    71. holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
    72. convertView.setTag(holder);
    73. }else {
    74. holder = (ViewHolder)convertView.getTag();
    75. }
    76. holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
    77. holder.title.setText((String)mData.get(position).get("title"));
    78. holder.info.setText((String)mData.get(position).get("info"));
    79. //给每一个列表后面的按钮添加响应事件
    80. holder.viewBtn.setOnClickListener(new View.OnClickListener() {
    81. @Override
    82. public void onClick(View v) {
    83. showInfo();
    84. }
    85. });
    86. return convertView;
    87. }
    88. ------------
    89. public final class ViewHolder{
    90. public ImageView img;
    91. public TextView title;
    92. public TextView info;
    93. public Button viewBtn;
    94. }

Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段(转)的更多相关文章

  1. [转]Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段

      收藏ArrayAdapter.SimpleAdapter和BaseAdapter的一些简短代码片段,希望用时方便想起其用法. 1.ArrayAdapter 只可以简单的显示一行文本 代码片段: A ...

  2. android有用代码片段

    一.  获取系统版本号: [java] view plaincopy PackageInfo info = this.getPackageManager().getPackageInfo(this.g ...

  3. C++STL模板库适配器之queue队列

    目录 适配器之队列 一丶队列简介 二丶队列(queue)代码操作 1.常用方法 适配器之队列 一丶队列简介 队列是先进先出的数据结构. 在STL中使用 queue表示. 底层使用的是序列容器deque ...

  4. Android开发6:Service的使用(简单音乐播放器的实现)

    前言 啦啦啦~各位好久不见啦~博主最近比较忙,而且最近一次实验也是刚刚结束~ 好了不废话了,直接进入我们这次的内容~ 在这篇博文里我们将学习Service(服务)的相关知识,学会使用 Service ...

  5. 深入理解使用ListView时ArrayAdapter、SimpleAdapter、BaseAdapter的原理

    在使用ListView的时候,我们传给setAdapter方法的Adapter通常是ArrayAdapter.SimpleAdapter.BaseAdapter,但是这几个Adapter内部究竟是什么 ...

  6. 13.Android-ListView使用、BaseAdapter/ArrayAdapter/SimpleAdapter适配器使用

    1.ListView ListView 是 Android 系统为我们提供的一种列表显示的一种控件,使用它可以用来显示我们常见的列表形式.继承自抽象类 AdapterView.继承图如下所示: 以微信 ...

  7. android 适配器simpleadapter和baseadapter区别

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

  8. Android必学之数据适配器BaseAdapter

    什么是数据适配器? 下图展示了数据源.适配器.ListView等数据展示控件之间的关系.我们知道,数据源是各种各样的,而ListView所展示数据的格式则是有一定的要求的.数据适配器正是建立了数据源与 ...

  9. 【转】Android 服务器之SFTP服务器上传下载功能

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

随机推荐

  1. Mongodb For C# "Query" 对象常用的方法

    Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.In("name", & ...

  2. HTML5中的Range对象的研究

    一:Range对象的概念 Range对象代表页面上的一段连续区域,通过Range对象,可以获取或修改页面上的任何区域,可以通过如下创建一个空的Range对象,如下: var  range = docu ...

  3. tyvj3481 越狱

    描述 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相信房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 输入格式 输入两个整数 ...

  4. "微信全球商业创新大赛-创意中国2015"国际MBA商业挑战赛开启

    微信商业化进程一直在摸索中前进,从未间断.近日由中欧国际工商学院与腾讯(Tencent)共同发起举办“微信全球商业创新大赛 - 创意中国2015”(We Win with WeChat - INNOV ...

  5. UISerachBar / UISearchDisplayController

    1. UISerachBar 继承与UIView, 包含uitextfield, 并且实现了uitextfielddelegate代理的主要内容 含有取消按钮, 默认不显示 2. UISerachDi ...

  6. 关于DCMTK3.6.0源代码编译的总结

    1.DCMTK cmake出来的代码是一样的.MT和MD版本的区别在于DCMTK工程下的每个子工程的代码生成中的MT还是MD,只要修改成为相应的值就可以了. 2.依赖包的选择.依赖包必须与上面中所说的 ...

  7. HDU 1710 二叉树的遍历 Binary Tree Traversals

    Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  8. HDU1879 kruscal 继续畅通工程

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  9. 【Hibernate】Hibernate系列8之管理session

    管理session 更简单的,注入对象:

  10. .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程

    原文来自VAllen cnblogs 一.使用教程1.解压后,双击Reflector.exe,如果有选择默认版本的.Net Framework,根据需要选择即可.你选择的版本不同则出现的默认程序集也不 ...