在开发中我们需要绑定一些数据展现到桌面上,这是就需要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. Selenium自动化测试(java语言)

    Selenium介绍 Selenium 1.0 包含 core. IDE. RC. grid 四部分,  selenium 2.0 则是在两位大牛偶遇相互沟通决定把面向对象结构化( OOPP) 和便于 ...

  2. GDKOI2015 Day2

    P1 题目描述: 给出一个二分图,选择互不相交的边,使得边覆盖的点权和最大. solution: 简单DP,用树状数组维护最大值. 时间复杂度:$O(n \log n) $ P2 题目描述: 给出N个 ...

  3. poj2509---抽k根烟就换一支,求能抽烟的总数

    #include <stdio.h> #include <stdlib.h> int main() { int now,k; while(scanf("%d %d&q ...

  4. Vxlan 原理

    https://www.gitbook.com/book/yeasy/openstack_understand_neutron/details 自己总结一下: 分析 VTEP的情况, 即Vxlan跟V ...

  5. [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(九)

    目的 1. 使用verilog/vhdl设计一个PCI的watchdog设备. 2. 通过systemverilog 写testbench. 很久之前研究过AC97的verilog代码.但是很久没用v ...

  6. mysql字符集编码乱码测试如下

    创建三个表tb_latin1,tb_utf8,tb_gbk,编码分别为latin1/utf8/gbk “你好a”字符串编码如下GBK : %C4%E3 %BA%C3 %61UTF-8 : %E4%BD ...

  7. [置顶] How to compile openjdk 7 in RHEL5

    1. 为什么要编译openjdk的code? 因为从Eclipse调试JDK的代码时,方法中的局部变量不能显示,这样是因为编译JDK时,没有编译成debug版本. 2. RHEL5中自带的开发者JDK ...

  8. uva 639 Don't Get Rooked 变形N皇后问题 暴力回溯

    题目:跟N皇后问题一样,不考虑对角冲突,但考虑墙的存在,只要中间有墙就不会冲突. N皇后一行只能放一个,而这题不行,所以用全图暴力放棋,回溯dfs即可,题目最多就到4*4,范围很小. 刚开始考虑放一个 ...

  9. 7. Reverse Integer

    1. 问题描述 Reverse digits of an integer.Example1: x = 123, return 321Example2: x = -123, return -321 cl ...

  10. JavaScript引用类型之Array数组之强大的splice()方法

    splice()方法可以说是Array数组最强大的方法,他的用法很多,主要用法是向数组的中部插入项! 下面是它的用法: arrayObject.splice(index,howmany,element ...