当我们使用ListView时,必不可少的便会使用到adapter,adapter的用处就像是一个水管接口,把你想展现的数据与你希望展现的布局样式通过某种协定结合起来。

ArrayAdapter针对每个你想展示的列表项情况,你需要定义一个你的ArrayAdapter, 下面介绍一下如何定义一个你想要的水管接口:

对于每一项的展示内容,你需要设定一个对应的数据类,比如说你想展示一个城市列表,每项中有一个TextView和CheckBox,显示一个城市和它的选中情况,理论上你的数据类中就需要提供这些所想展示的数据,为了数据和视图对应得上,我们需要重写getView方法:   "getView(int position, View convertView, ViewGroup parent)"  参数含义是:position:当前所绘制项在适配器中所处下标,你也可以理解为正在绘制第几个数据源的视图; convertView:当前传入的列表视图,可能为空,可能不为空(将当前不可见的视图复用);parent,父容器

 if(convertView == null){
                 convertView = getActivity().getLayoutInflater()
                         .inflate(R.layout.list_item_crime, null);
                 Log.i(TAG, "line 51");
             }

上面是一段很重要的代码,它的含义是仅当检查到传入的绘制视图为空时,才会先建一个视图加入列表中;重用视图的意义在于尽量减少对视图的不必要消耗,想象有超过100项的列表,你的屏幕上只能显示其中的10项,那你就需要一直维护暂时不需要用到的90项的视图,1%的利用率,所以我们需要重用视图,当视图往下滑时,当有项消失不见时,这时的视图就会被传入到新项绘制的getView函数中作为参数:convertView,再去复写:假设我的数据源是一个CityItem,有两个值一个是城市名称,一个是该城市是否处于选中状态;这时为了能展示出来,我的布局选项 “R.layout.list_item_crime” 就需要对应有一个TextView 和 CheckBox,通过findViewById找到对应组件后赋值:

 @Override
         public View getView(final int position, View convertView, ViewGroup parent) {
             if (convertView == null) {
                 convertView = getLayoutInflater().inflate(
                    R.layout.city_list_item, null);//希望展示出来的布局样式,内含有一个textview和checkbox,id分别是R.id.city_name和R,id.isSelected
             }
         CityItem c = cityItems.get(position);
             TextView titleView = (TextView) convertView
                     .findViewById(R.id.city_name);//通过Id找到组件
         titleView.setText(c.getName());//赋值

              CheckBox selectedCheckBox = (CheckBox) convertView
                     .findViewById(R.id.isSelected);

             selectedCheckBox.setChecked(c.getSelected());
         return convertView;
 }

之后你也可以自定义一个构造方法,

 public CityAdapter(ArrayList<CityItem> crimes,Context context) {
             super(context, 0, crimes);
         }

这样我建立一个适配器时只用传入我关心的数据源和上下文,这样一个自定义的ArrayAdapter就写好了;

怎么用呢?找到对应的ListView视图,加入适配器即可,

 cityAdapter = new CityAdapter(cityItems, this);
 cityList.setAdapter(cityAdapter);

Android之ListView——ArrayAdapter的用法学习的更多相关文章

  1. Android之ListView——ArrayAdapter的学习与总结

    问题:当ListView选定的ListItem视图中存在一些UI组件,如CheckBox,希望保存状态,但实际上第一次完成时发现勾选后的选项在列表往下滑再滑回去后,状态没有保存 解决过程: 1)思考后 ...

  2. android的listview的详细用法

    listview是android开发中的一个极其重要的控件.所以,要学会android,如果这个不会,基本是不会android的. 这里按照几个步骤介绍这个控件的使用. 1. 使用API中ArrayA ...

  3. 42.Android之ListView中ArrayAdapter简单学习

    今天学习下Android中ListView关于ArrayAdapter数据绑定, 废话少说直接上代码. 改下布局文件: <?xml version="1.0" encodin ...

  4. Android(java)学习笔记132:ListViewProject案例(ListView + ArrayAdapter)

    1.首先是MainActivity.java文件,如下: package com.himi.lv1; import java.util.ArrayList; import java.util.List ...

  5. Android笔记: ListView基本用法-ArrayAdapter

    ListView实现过程: 新建适配器->添加数据源到适配器->视图加载适配器 数据适配器: 把复杂的数据(数组.链表.数据库.集合等)填充在制定的试图界面上. 两种常用数据适配器 Arr ...

  6. Android(java)学习笔记74:ListViewProject案例(ListView + ArrayAdapter)

    1. 首先是MainActivity.java文件,如下: package com.himi.lv1; import java.util.ArrayList; import java.util.Lis ...

  7. Android listview与adapter用法

    listview与adapter用法 博客分类: android   一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...

  8. Android—— ListView 的简单用法及定制ListView界面

    一.ListView的简单用法 2. 训练目标 1) 掌握 ListView 控件的使用 2) 掌握 Adapter 桥梁的作用 实现步骤: 1)首先新建一个项目, 并让ADT 自动帮我们创建好活动. ...

  9. Android ListView ArrayAdapter 的简单使用

    前面写了3篇关于android的文章,其中的演示程序都写在了一个工程中,当时为了方便测试就在启动页MainActivity中放了3个按钮,点击不同的按钮进入不同的示例程序页面,MainActivity ...

随机推荐

  1. 关于angularjS与jQuery框架的那些事

    这篇文章主要介绍了jQuery和angularJS的区别浅析,本文着重讲解一个熟悉jQuery的程序员如何应对angularJS中的一些编程思想的转变吗,需要的朋友可以参考下 最近一直研究angula ...

  2. 如何在真机装linux(本人在台式机上又添了个硬盘)

    首先呢,本人就是小渣渣,所以对于装ubuntu在真机,刚开始真不知道如何下手,以前只是在虚拟机中装过,在经过查阅各种资料后,成功安装,我的台式机本身装的系统win7,是下面就是我安装的过程啦 1. 我 ...

  3. LNMP添加、删除虚拟主机及伪静态使用教程

    一般情况下每个虚拟主机就是一个网站,网站一般通过域名进行访问.LNMP 1.2的网站添加过程和LNMP 1.1的基本类似,但是增加了FTP和数据库的创建.LNMP1.2的防跨目录也由原来在php.in ...

  4. Reveal的使用及破解方法

    Reveal的使用其实真的很简单,就如第一张镇楼图的效果一样.中间是3D可视化当前APP页面的视图,左侧则是这些UI元素和层次结构,而右侧则是View的属性,你可以修改View的颜色.frame等等, ...

  5. javaScript 查询字符串参数 获取

    function getQueryStringArgs() { //取得查询字符串并去掉开头的问号 var qs = (location.search.length > 0 ? location ...

  6. (转载)HTML5 LocalStorage 本地存储

    原文地址:http://www.cnblogs.com/xiaowei0705/archive/2011/04/19/2021372.html HTML5 LocalStorage 本地存储 说到本地 ...

  7. Android之listview && adapter

    今天我们讲的也是非常重要的一个控件listview-最常用也是最难的 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...

  8. JS绑定JavaScript事件

    //onblur="onblurs(this)" // function onblurs(e) { // alert(e.value); // }

  9. Xml与DataTable相互转换方法

    1.Xml与DataTable相互转换方法:http://www.cnblogs.com/lilin/archive/2010/04/18/1714927.html

  10. Linux 中 Vi 编辑器的简单操作

    Linux 中 Vi 编辑器的简单操作 Vi 编辑器一共有3种模式:命名模式(默认),尾行模式,编辑模式.3种模式彼此需要切换. 一.进入 Vi 编辑器的的命令 vi  filename //打开或新 ...