在开发中我们需要绑定一些数据展现到桌面上,这是就需要AdapterView。AdapterView是ViewGroup的子类,它决定了怎么展现视图通过Adapter来绑定特殊的数据类型。 AdapterView是非常有帮助的当你展现数据在你的布局中。Gallery,ListView和 Spinner是AdapterView的子类。

      下面看一下AdapterView的结构图:

      

      然后再看一下Adapter的结构图:

     

    上面已经充分展现了他们的子类和父类的基础关系。

     下面我们看一个ListViewDemo的例子:

    先来看一个简单的adapter的例子:

   

  1. public class SimpleList extends ListActivity {
  2. private String[] mListString={"姓名:王魁锋","性别:男","年龄:23",
  3. "居住地:上海市普陀区","邮箱:wangkuifeng0118@126.com"};
  4. private ListView mListView=null;
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. // TODO Auto-generated method stub
  8. super.onCreate(savedInstanceState);
  9. mListView=this.getListView();
  10. setListAdapter(new ArrayAdapter<String>(this,
  11. android.R.layout.simple_list_item_1,mListString));
  12. mListView.setOnItemClickListener(new OnItemClickListener() {
  13. @Override
  14. public void onItemClick(AdapterView<?> parent, View view,
  15. int position, long id) {
  16. // TODO Auto-generated method stub
  17. ).show();
  18. }
  19. });
  20. }

这里用到了系统定义好的适配模式,当然这只能用来简单的数据适配,下面看一下效果:

    

    接下来看一个稍微复杂点的,SimpleAdapter怎么适配:

   

  1. public class IconList extends ListActivity {
  2. private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"};
  3. private String[] mListStr = { "王魁锋", "男", "23", "上海市普陀区",
  4. "wangkuifeng0118@126.com"};
  5. ListView mListView = null;
  6. ArrayList<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. // TODO Auto-generated method stub
  10. mListView = getListView();
  11. int lengh = mListTitle.length;
  12. ; i < lengh; i++) {
  13. Map<String,Object> item = new HashMap<String,Object>();
  14. item.put("image", R.drawable.portrait);
  15. item.put("title", mListTitle[i]);
  16. item.put("text", mListStr[i]);
  17. mData.add(item);
  18. }
  19. SimpleAdapter adapter = new SimpleAdapter(this,mData,R.layout.iconlist,
  20. new String[]{"image","title","text"},new int[]{R.id.image,R.id.title,R.id.text});
  21. setListAdapter(adapter);
  22. mListView.setOnItemClickListener(new OnItemClickListener() {
  23. @Override
  24. public void onItemClick(AdapterView<?> parent, View view,
  25. int position, long id) {
  26. // TODO Auto-generated method stub
  27. Toast.makeText(IconList.this,"您选择了标题:" + mListTitle[position] + "    内容:"+mListStr[position], Toast.LENGTH_LONG).show();
  28. }
  29. });
  30. super.onCreate(savedInstanceState);
  31. }
  32. }

上面的数据可以是同数据库读取的也可以是从网络获取的,这里不做过多介绍,看下效果:

    

      哈哈 看起来美观了些,如果要做更复杂的布局,哪就要用BaseAdapter了。先看一下布局文件:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent" android:layout_height="wrap_content">
  4. <ImageView android:id="@+id/color_image"
  5. android:layout_width="wrap_content" android:layout_height="fill_parent"
  6. android:layout_alignParentTop="true" android:layout_alignParentBottom="true"
  7. android:adjustViewBounds="true"
  8. android:padding="2dip" />
  9. <TextView android:id="@+id/color_title"
  10. android:layout_width="fill_parent" android:layout_height="wrap_content"
  11. android:layout_toRightOf="@+id/color_image"
  12. android:layout_alignParentTop="true"
  13. android:layout_alignParentRight="true" android:singleLine="true"
  14. android:ellipsize="marquee"
  15. android:textSize="15dip"  />
  16. <TextView android:id="@+id/color_text"
  17. android:layout_width="fill_parent" android:layout_height="wrap_content"
  18. android:layout_toRightOf="@+id/color_image"
  19. android:layout_below="@+id/color_title"
  20. android:layout_alignParentBottom="true"
  21. android:layout_alignParentRight="true"
  22. android:singleLine="true"
  23. android:ellipsize="marquee"
  24. android:textSize="20dip" />
  25. </RelativeLayout>

下面是核心代码:

 

  1. public class ColorList extends ListActivity {
  2. private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"};
  3. private String[] mListText={"王魁锋","男","23","上海市普陀区","wangkuifeng0118@126.com"};
  4. private ListView mListView=null;
  5. private MyListAdapter myAdapter=null;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. // TODO Auto-generated method stub
  9. mListView=this.getListView();
  10. myAdapter=new MyListAdapter(this);
  11. this.setListAdapter(myAdapter);
  12. mListView.setOnItemClickListener(new OnItemClickListener() {
  13. @Override
  14. public void onItemClick(AdapterView<?> parent, View view,
  15. int position, long id) {
  16. // TODO Auto-generated method stub
  17. View v=parent.getChildAt(position);
  18. v.setBackgroundColor(Color.RED);
  19. ).show();
  20. }
  21. });
  22. super.onCreate(savedInstanceState);
  23. }
  24. private class MyListAdapter extends BaseAdapter{
  25. private Context mContext;
  26. private int[] colors=new int[]{0xff626569,0xff4f5257 };
  27. public MyListAdapter(Context context){
  28. mContext=context;
  29. }
  30. @Override
  31. public int getCount() {
  32. // TODO Auto-generated method stub
  33. return mListText.length;
  34. }
  35. @Override
  36. public Object getItem(int position) {
  37. // TODO Auto-generated method stub
  38. return position;
  39. }
  40. @Override
  41. public long getItemId(int position) {
  42. // TODO Auto-generated method stub
  43. return position;
  44. }
  45. @Override
  46. public View getView(int position, View convertView, ViewGroup parent) {
  47. ImageView image=null;
  48. TextView title=null;
  49. TextView  content=null;
  50. if(convertView==null){
  51. convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);
  52. image=(ImageView) convertView.findViewById(R.id.color_image);
  53. title=(TextView) convertView.findViewById(R.id.color_title);
  54. content=(TextView) convertView.findViewById(R.id.color_text);
  55. }
  56. int colorPos=position%colors.length;
  57. convertView.setBackgroundColor(colors[colorPos]);
  58. title.setText(mListTitle[position]);
  59. content.setText(mListText[position]);
  60. image.setImageResource(R.drawable.portrait);
  61. return convertView;
  62. }
  63. }
  64. }

     BaseAdapter可以让我们做比较复杂的布局,只要在xml文件中设置好布局格式,在getView中分别取出放入相应的值就可以了。下面看一些效果:

   

    还有一些SpinnerAdapter和SimpleCursorAdapter等系统自带的适配器,都是比较简单的,可以看下API自行练习一下,这里特别说明一下,从数据库里取出的数据最好直接放入 SimpleCursorAdapter很方便的。

Android适配器Adapter学习的更多相关文章

  1. Android适配器Adapter的学习

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

  2. android适配器Adapter

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

  3. 浅析android适配器adapter中的那些坑

    做项目中遇到的,折磨了我将近两天,今天把经验分享出来.让大家以后少走点弯路,好了.简单来说一下什么是android的适配器,怎样定义.怎样添加适配器的重用性.怎样去减少程序的耦合性 适配器顾名思义是用 ...

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

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

  5. android中Adapter适配器的讲解

    Adapter(适配器的讲解) 适配器就我自己来看,我觉得这是一个非常重要的知识点,Adapter是用来帮助填出数据的中间桥梁,简单点说吧:将各种数据以合适的形式显示在View中给用户看.Adapte ...

  6. 设计模式学习心得<适配器 Adapter>

    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接 ...

  7. Android Listview & Adapter

    Listview主要有两个职责: 将数据填充到布局 处理用户的选择点击等操作 列表的显示需要三个元素: ListVeiw 用来展示列表的View 适配器(Adapter) 用来把数据映射到ListVi ...

  8. Android Studio阶段性学习总结_1

    这半个月一直在学习Android方面的知识,对Android开发有了一个基本的认识,学会了Android studio的基本操作. 在建立第一个Android studio项目时,我遇到了很大的阻碍, ...

  9. Android之Adapter用法总结-(转)

    Android之Adapter用法总结 1.概念 Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带.在常见的View(List View,Grid Vie ...

随机推荐

  1. HTML5兼容IE各版本的写法

    IE下判断IE版本的语句 <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见   <!--[if lte IE 7]> < ...

  2. Windows系统环境下一个Apache运行多个PHP版本

    我个人机器上环境是基于Apache2.2运行的PHP5.2/4,如你想部署其他版本的PHP或在更多的版本之间切换,同理操作步骤是一致的. 依本人环境为例,机器上已经安装了PHP5.2版本, 所以首先重 ...

  3. 什么是位、字节、字、KB、MB

    什么是位.字节.字.KB.MB 位:"位(bit)"是电子计算机中最小的数据单位.每一位的状态只能是0或1. 字节:8个二进制位构成1个"字节(Byte)",它 ...

  4. Oracle EBS-SQL (GL-1):从总帐追溯到接收

    SELECT je_header_id, je_line_num, trx_class_name, trx_type_name, trx_number_displayed, trx_date,comm ...

  5. 不能取组织ID

    应用 Oracle   Purchasing 层 Level Function 函数名 Funcgtion Name PO_POXBWVRP 表单名 Form Name POXBWVRP 说明 Des ...

  6. ARM Cortex M3(V7-M架构)硬件启动程序 二

    解析 STM32 的启动过程 解析STM32的启动过程 当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择.如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main ...

  7. bash代码

    bash代码: #!/bin/bash MySQLSTARTUP="/data/3306/mysql" DbProcessCount=`ps -ef|grep mysql|grep ...

  8. 使用 Eclipse Memory Analyzer 进行堆转储文件分析

    Eclipse Memory Analyzer(MAT)是著名的跨平台集成开发环境 Eclipse Galileo 版本的 33 个组成项目中之一,它是一个功能丰富的 JAVA 堆转储文件分析工具,可 ...

  9. JQuery 操作input

    获取选中的值 获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item ...

  10. SqLite 使用 Dapper 查询INTEGER类型的主键问题

    在程序实体定义时: public int TableID { get; set; } 使用Dapper查询SqLite数据库时会报错 Error parsing column (= - Int64) ...