`
切切歆语
  • 浏览: 30539 次
  • 性别: Icon_minigender_1
  • 来自: 泸州市
社区版块
存档分类
最新评论
阅读更多

ListView之适配器的使用,包含了ArrayAdapter,SimpleAdapter ,BaseAdapter等适配器。

 

 

1:ArrayAdapter

 

 

 

Java代码
  1. /**** 
  2.  * 
  3.  * 
  4.  * ArrayAdapter 
  5.  * @author Administrator 
  6.  * 
  7.  */  
  8. public class ArrayAdapterActivity extends Activity {  
  9.    
  10.    private ListView mListView;  
  11.     //定义一个String数组,数组里的数据就是ListView里的一项  
  12.    String[] arrayDate={"笑傲江湖","风清扬","令狐冲","岳不群","乔峰","虚竹","段誉","中神通","东邪","西毒","南帝","北丐"};  
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_arrayadapter);  
  17.         initView();  
  18.     }  
  19.     private void initView() {  
  20.       mListView=(ListView)findViewById(R.id.listView1);  
  21.       //新建一个数组适配器ArrayAdapter绑定数据,参数(当前的Activity,布局文件,数据源)  
  22.       //android.R.layout.simple_list_item_1      本身自带布局  
  23.       ArrayAdapter<String>  adapter=new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,arrayDate);  
  24.       //视图(ListView)加载适配器  
  25.       mListView.setAdapter(adapter);  
  26.       mListView.setOnItemClickListener(new OnItemClickListener() {  
  27.    
  28.          @Override  
  29.          public voidonItemClick(AdapterView<?> parent, View view,  
  30.                 int position,long id) {  
  31.              
  32.             Toast.makeText(ArrayAdapterActivity.this,arrayDate[position],1).show();  
  33.              
  34.          }  
  35.       });  
  36.    }  
  37.      
  38. }  



预览效果:

 

 

2:SimpleAdapter

 

使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。

 

归纳步骤:

 

 

 

1、准备数据源:指定由Map组成的List数据源

 

2、新建适配器,设置键值名和对应控件id,绑定数据

 

3、视图加载适配器

 

参数:

 

new SimpleAdapter(context, data, resource, from, to)

 

context ------SimpleAdapter关联的View的运行环境

 

data ---------一个Map组成的List。在列表中的每个条目对应列表中的一行,每一个map中应该包含所有在from参数中指定的键

 

resource ------ 一个定义列表项的布局文件的资源ID。布局文件将至少应包含那些在to中定义了的ID

 

from ---------- 一个将被添加到Map映射上的键名

 

to  -------------将绑定数据的视图的ID,跟from参数对应

 

 

 

代码:

 

 

 

Java代码
  1. /**** 
  2.  * 
  3.  * 
  4.  * SimpleAdapter 
  5.  * 
  6.  * @author Administrator 
  7.  * 
  8.  */  
  9. public class  SimpleAdapterActivity extends Activity {  
  10.    
  11.    private ListView mshow_list;  
  12.    String[] name = { "张三","李四","小星星","静静","明明","小张" };  
  13.    
  14.    int[] img = {R.drawable.a2, R.drawable.a3,R.drawable.a4, R.drawable.a5,R.drawable.a6,R.drawable.ic_launcher};  
  15.    protected void  onCreate(android.os.Bundle savedInstanceState) {  
  16.        
  17.       super.onCreate(savedInstanceState);  
  18.       //加载布局文件  
  19.       setContentView(R.layout.activity_simpleadapter);  
  20.       //2.获取listview控件的对象  
  21.       mshow_list=(ListView)findViewById(R.id.show_listview);  
  22.        
  23.       /** 
  24.        * 第四步:定义SimpleAdapter(并加载对应item布局文件,获得对应的keY,获得对应item布局文件中的组件的id 
  25.        * 
  26.        * 第二个参数data:数据源 
  27.        * 第三个参数resource :listView每个item对应的布局文件 
  28.        * 第四个参数 from: 
  29.        * 第五个参数to: 
  30.        *new String[]{对应的key}v 
  31.        */  
  32.       SimpleAdapter simpleAdapter=new SimpleAdapter(this, get_data(),  
  33.             R.layout.item_simple,new String[]{  
  34.          "type","age","img"},newint[]{R.id.type_txt,R.id.age_txt,R.id.img});  
  35.        
  36.       //第五步:通过setAdapter将适配器绑定到listView控件  
  37.       mshow_list.setAdapter(simpleAdapter);  
  38.              
  39.        
  40.        
  41.    };  
  42.    
  43.    /*** 
  44.     * 数据源 
  45.     * 
  46.     * 
  47.     */  
  48.    private  ArrayList<Map<String, Object>> get_data() {  
  49.       // 定义一个ArrayList的集合(集合中又封装一个map类型的集合)  
  50.       ArrayList<Map<String, Object>>data_list = new ArrayList<Map<String,Object>>();  
  51.       for (int i = 0; i<name.length; i++) {  
  52.          // key,value intstring map不能new map  
  53.          Map<String, Object> data_map = newHashMap<String, Object>();  
  54.          data_map.put("type", name[i]);  
  55.          data_map.put("age", i + 10+"岁");  
  56.          data_map.put("img", img[i]);  
  57.          // 将map集合添加(封装)到ArrayList集合中  
  58.          data_list.add(data_map);  
  59.    
  60.       }  
  61.       // 返回ArrayList集合  
  62.       returndata_list;  
  63.   
  64.    }  
  65. }  



预览效果:

 


 

3:BaseAdapter

 

步骤

使用BaseAdapter实现复杂的ListView的步骤:

 

1 首先准备好需要显示在LiseView中的数据 ——List

 


2 然后编写2 个XML 文件 第一个文件是ListView控件所在的布局文件 第二个文件是ListVIew中每一个item的布局文件

 


3 创建一个继承自BaseAdapter的类

 


4 为ListView绑定适配器 setAdapter(继承BaseAdapter 类的实例)

 


5 用传统方式来覆写适配器的getView函数和getCount 函数(从参数convertView里映射布局文件,find各个控件填充数据)


6 加入ViewHolder类(定义n个控件的声明)用convertView.setTag(viewHolder)在View和Object之间关联,此目的是节省find多次的时间。

 

 

 

 

代码:

 

Activity.java

 

 

 

Java代码
  1. /*** 
  2.  * 
  3.  * 
  4.  * BaseAdapter 
  5.  * @author Administrator 
  6.  * 
  7.  */  
  8. public class BaseAdapterActivity extends Activity {  
  9.    
  10.    private ListView mbaseshow_listview;  
  11.    private String[] arrayDate={"东方不败","天龙八部","九阴真经","东邪","南帝","北丐"};  
  12.    private int[] img = {R.drawable.l2, R.drawable.l3,R.drawable.l1, R.drawable.a5,R.drawable.a6,R.drawable.ic_launcher};  
  13.    @Override  
  14.    protected void onCreate(Bundle savedInstanceState) {  
  15.       // TODOAuto-generated method stub  
  16.       super.onCreate(savedInstanceState);  
  17.       // 加载布局  
  18.       setContentView(R.layout.baselistview_layout);  
  19.       mbaseshow_listview =(ListView) findViewById(R.id.baseshow_listview);  
  20.       initView();  
  21.     
  22.    }  
  23.     
  24.     
  25.     
  26.    private void initView() {  
  27.       // TODOAuto-generated method stub  
  28.        MyAdapter myAdapter = new MyAdapter(this,arrayDate,img);  
  29.        //绑定适配器  
  30.         mbaseshow_listview.setAdapter(myAdapter);  
  31.         //刷新适配器  
  32.        myAdapter.notifyDataSetChanged();  
  33.        /**ListView的item点击事件 
  34.         * 
  35.         * 
  36.         *AdapterView<?> arg0:适配器 
  37.         *View arg1:表示当前item的view(视图),通过它可以获取该item中的各个组件 
  38.         *position:当前item的id, 
  39.         *arg3:表示当前的item在listview中相对位置 
  40.         * 
  41.         * 
  42.         **/  
  43.         mbaseshow_listview.setOnItemClickListener(newOnItemClickListener() {  
  44.    
  45.          @Override  
  46.          public voidonItemClick(AdapterView<?> arg0, View arg1, int position,  
  47.                 long arg3) {  
  48.             Toast.makeText(BaseAdapterActivity.this,"你点击了"+arrayDate[position],-1000).show();  
  49.              
  50.          }  
  51.       });  
  52.          
  53.         mbaseshow_listview.setOnItemLongClickListener(newOnItemLongClickListener() {  
  54.    
  55.          @Override  
  56.          public boolean onItemLongClick(AdapterView<?> arg0, View arg1,  
  57.                 int position,long arg3) {  
  58.             Toast.makeText(BaseAdapterActivity.this,"执行了长按事件",0 ).show();  
  59.             return false;  
  60.          }  
  61.       });  
  62.    }    
  63.   
  64.   
  65. BaseAdapter.java  
  66.   
  67.   
  68. public class MyAdapter extends BaseAdapter {  
  69.   
  70.    private String[] datas;  
  71.    private LayoutInflater inflater;  
  72.    private int[] imgs;  
  73.    public MyAdapter(Contextcotext, String[] datas,int[] imgs) {  
  74.       this.datas = datas;  
  75.        inflater =LayoutInflater.from(cotext);  
  76.        this.imgs=imgs;  
  77.    }  
  78.    
  79.    /** 
  80.     * 
  81.     * 返回的item总数量 
  82.     * 
  83.     */  
  84.    public intgetCount() {  
  85.       return datas.length;  
  86.    }  
  87.    
  88.    /** 
  89.     * 
  90.     * item的位置 
  91.     * 
  92.     */  
  93.    @Override  
  94.    public Object getItem(int position){  
  95.       // TODOAuto-generated method stub  
  96.       return datas[position];  
  97.    }  
  98.    
  99.    /** 
  100.     * 
  101.     * 对应每个item里面控件的id 
  102.     * 
  103.     */  
  104.    @Override  
  105.    public longgetItemId(int position) {  
  106.       // TODOAuto-generated method stub  
  107.       return position;  
  108.    }  
  109.    
  110.    @Override  
  111.    public View getView(int position,View convertView, ViewGroup parent) {  
  112.    
  113.       ViewHolde viewHolde = null;  
  114.        
  115.       if (null ==convertView) {  
  116.          // 实例化 ViewHolde对象  
  117.    
  118.       viewHolde = newViewHolde();  
  119.          convertView = inflater.inflate(  
  120.                 R.layout.item_listview,null);  
  121.          viewHolde.img=(ImageView)convertView.findViewById(R.id.img);  
  122.          viewHolde.mtype_txt =(TextView) convertView  
  123.                 .findViewById(R.id.text);  
  124.           
  125.          convertView.setTag(viewHolde);  
  126.    
  127.       }  
  128.        
  129.       else {  
  130.          viewHolde = (ViewHolde)convertView.getTag();  
  131.       }  
  132.        
  133.       viewHolde.mtype_txt.setText(datas[position]);  
  134.       viewHolde.img.setImageResource(imgs[position]);  
  135.       // 返回item视图  
  136.       returnconvertView;  
  137.    
  138.    }  
  139.    
  140.    class ViewHolde {  
  141.       TextView mtype_txt;  
  142.       ImageView img;  
  143.    }  
  144.    
  145. }  



预览效果:


 

 

 

 

 

点击下载源码

 

分享到:
评论

相关推荐

    android之listview万能适配器

    "android之listview万能适配器"概念旨在创建一个通用、灵活的适配器,能够适应各种不同的数据结构和界面需求。以下将详细解析这个主题。 1. **适配器的作用**: - 适配器是`ListView`与数据模型之间的桥梁,它将...

    最简单的listview适配器的使用

    在android 开发中ListView是比较常用的组件,它以列表的像是展示具体的内容,并且能够根据数据的长度自适应显示.其中适配ListView的方式也有很多种,整理了一下作为初学者的listview中适配器的使用。

    Android ListView 万能适配器

    "Android ListView 万能适配器"是解决ListView数据绑定的一种高效、灵活的方法,它能够适应多种类型的数据,使得开发者无需为每种不同的数据类型创建单独的Adapter。在本项目中,我们探讨的是一个名为"baseAdapter-...

    android打造listview通用适配器

    "android打造listview通用适配器"这个主题旨在解决这个问题,通过创建一个可复用的适配器模板,减少代码冗余,提高代码的可维护性和效率。 首先,我们要理解Adapter的作用。Adapter是ListView与数据源之间的桥梁,...

    Android打造listview万能适配器

    在Android开发中,ListView是展示大量数据常用的组件之一。它具有高效的滚动性能,可以通过复用View来节省内存。为了使ListView能够正确显示各种不同的数据,我们需要编写一个适配器(Adapter)。本文将深入探讨如何...

    android listview常用适配器

    本篇文章将深入探讨Android中的BaseAdapter,它是ListView适配器的基础实现,适用于自定义复杂的列表视图。 一、BaseAdapter简介 BaseAdapter是Android提供的一个抽象类,它是所有ListView适配器的基础。开发者可以...

    打造listview万用适配器

    在Android开发中,ListView是广泛使用的控件,用于展示大量数据列表。为了使ListView能够灵活地显示...通过以上步骤,我们可以创建一个适应性强、可复用的ListView适配器,满足各种需求,提高代码的可维护性和效率。

    listView之自定义适配器Demo

    在这个"ListView之自定义适配器Demo"中,我们将探讨如何使用自定义适配器来实现特定的UI布局和交互功能,包括点击事件处理以及内容展示。 首先,我们要了解ListView的工作原理。ListView通过Adapter来与数据源进行...

    万能listView ViewHolder适配器

    综上,万能的ViewHolder适配器是为了优化ListView性能和提高代码复用性而设计的一种解决方案,而AdapterUtils工具类则是为了简化适配器的实现和提高开发效率。理解并熟练运用这些技术,可以有效地提升Android应用的...

    ListView之适配器

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表。适配器(Adapter)是连接ListView与数据源的关键...通过实践,你会对ListView适配器有更深的认识,掌握如何将数据高效地展示在ListView上。

    listview适配器 ListViewAdapter和ViewHolder代码.rar

    本压缩包“listview适配器 ListViewAdapter和ViewHolder代码.rar”提供了一个简单的使用示例,帮助开发者理解和应用这两个概念。 ListViewAdapter是Android中一个专门用于ListView的适配器类,它充当了数据源和...

    ListView的万能适配器

    为了提高代码的复用性和可维护性,开发者通常会创建一个"万能适配器"(Universal Adapter),来适应各种不同类型的ListView需求。这个适配器的设计目标是简化数据绑定和视图更新的过程,使得在处理多种数据源时,只...

    listView无需适配器添加数据(写demo快速开发)entries属性的特殊用法

    listView无需适配器添加数据(写demo快速开发)entries属性的特殊用法,更多请查看我的博客:http://blog.csdn.net/xiayiye5/article/details/78789251

    listView内嵌套listView的专用 适配器

    直接两个listView 布局文件,数据直接输入,获得 嵌套ListView 的适配效果

    android listView 适配器demo

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常配合适配器(Adapter)使用。本示例“android listView 适配器demo”将详细讲解如何利用适配器机制来动态填充ListView的数据。 首先...

    Android ListView控件的使用(自定义适配器 + ListView + 解决OOM )

    本教程将深入讲解如何使用ListView,结合自定义适配器以及解决Out-Of-Memory(OOM)问题。 首先,`ListView`是一个可滚动的视图,它能够显示一行行的数据。它通过Adapter来获取数据并将其渲染为可视化的列表项。...

    详解xamarin Android 实现ListView万能适配器

    通过使用ListView万能适配器,我们可以轻松地实现不同的ListView布局,并且可以极大地提高ListView的性能。 本文主要介绍了xamarin Android 实现ListView万能适配器的相关知识点,包括ViewHolder的实现、泛型...

    自定义ListView(适配器和布局)

    本文将深入探讨如何通过适配器(Adapter)和自定义布局来实现一个功能丰富的自定义ListView。 一、适配器(Adapter)的理解与应用 适配器是Android中连接数据源和UI控件的关键桥梁,它将数据转换成可以被ListView...

    Android 打造万能的ListView GridView 适配器

    在ListView和GridView中,我们通常使用BaseAdapter作为自定义适配器的基础类。BaseAdapter提供了一些基本的方法,如`getCount()`、`getItem()`、`getItemId()`和`getView()`,我们需要重写这些方法来实现自定义的...

    ListVIew适配器(item事件)

    总之,ListView适配器是Android开发中的核心组件之一,通过适配器我们可以轻松地将数据展示为可交互的列表。理解和熟练掌握ListView的适配器以及item事件处理,对于提升Android应用的用户体验至关重要。在实际项目中...

Global site tag (gtag.js) - Google Analytics