【笔记】ListView的使用
1.0 ListView三要素
1.0.1 创建基本步骤
1.在布局文件中创建一个ListView组件,并在Activity中声明这个组件。
2.在Activity中,创建一个合适的Adapter。
3.使用ListView的setAdapter(Adapter adapter),来设置成为ListView的Adapter。
1.0.2 不同的Adapter,不同的用法
1.ArrayAdapter
1.1 创建ArrayAdapter
ArrayAdapter arrayAdapter = new ArrayAdapter(Context context,int layout,T[] data);
1.1.1 参数介绍
context:上下文
layout:布局资源ID
data:数据集(也就是将要显示在ListView上每个Item的数据,在ArrayAdapter的构造方法里,是一个泛型的数组)
1.1.2 使用ArrayAdapter
使用listView.setAdapter(arrayAdapter)即可。
1.1.3 ArrayAdapter是一种很简单的数据适配器。在这里已经粗略的介绍完毕了。
2.SimpleAdapter
2.1 创建SimpleAdapter
SimpleAdapter simpleAdapter = new SimpleAdapter(Context context,List list,int layout,String[] key,int[] ID);
2.2.1 参数介绍
context:上下文
list:数据集合,一般使用ArrayList<HashMap<String,Object>> arrayList = new ArrayList<HashMap<String,Object>>();
layout:Item布局资源ID
key:map里面对应的key
ID:layout里面的每一个组件ID(必须和key一一对应,位置相对一样)
2.2.2 初始化参数
list:使用map.put("key",对应的资源ID);
layout:自定义的Item布局资源;
key:new String[]{"key01","key02"};
ID:new int[]{ID01,ID02};
2.2.3 使用SimpleAdapter
使用listView.setAdapter(simpleyAdapter)即可。
3.BaseAdapter
3.1 创建BaseAdapter
创建BaseAdapter和前者完全不同,它需要创建一个类去继承BaseAdapter类来进行创建。
3.1.1 BaseAdapter类里的成员方法介绍
3.1.1.1 成员方法概括
getCount(),getItem(),getItemID(),getView();
3.1.1.2 系统怎么调用BaseAdapter里的成员方法
首先,我们在使用BaseAdapter的时候,最开始调用的是getCount()方法,该方法会返回整个ListView的条目数。然后调用getView来一一的创建每一个 Item。其中,getItem()和getItemID()是在获取数据的时候调用。
3.1.1.3 convertView,viewHolder
在getView()函数中,有一个convertView的参数。这个参数,相当于是ListView的可见Item的缓存。当用户进入界面的时候,ListView中有可见的Item时,convertView为null。如果,有Item不可见。那么,当用户进行滑动的时候,convertView便不再为null。首先,我们需要在converView为空的时候,将可见的Item通过viewHolder存入到convertView之中。然后,当用户滑动的时候,通过之前的setTag()方法给每个Item加上的Tag来获取Item。这样就可以节省系统的开销。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
Log.i("MyListViewBase", "getView " + position + " " + convertView); if(convertView == null){
convertView = inflater.inflate(R.layout.item_simple,null);
viewHolder = new ViewHolder(); viewHolder.button = (Button) convertView.findViewById(R.id.item_btn);
viewHolder.textView01 = (TextView) convertView.findViewById(R.id.item_textView_t);
viewHolder.textView02 = (TextView) convertView.findViewById(R.id.item_textView_b); //设置tag,存放viewHolder
convertView.setTag(viewHolder);
}else{
//convertView不为空时,,根据tag来获取viewHolder(快速获取,节省系统开销)
viewHolder = (ViewHolder) convertView.getTag();
} //获取数组里面特定位置的相对于key的值,并赋予给textView
viewHolder.textView01.setText(getData().get(position).get("textView01").toString());
viewHolder.textView02.setText(getData().get(position).get("textView02").toString()); viewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"你点击了"+(position+1)+"个按钮",Toast.LENGTH_SHORT).show();
}
}); return convertView;
}
viewHolder的结构:
private class ViewHolder{
private TextView textView01;
private TextView textView02;
private Button button;
}
【笔记】ListView的使用的更多相关文章
- 安卓第六天笔记--ListView
安卓第六天笔记--ListView 1.AdapteView AdapteView 继承ViewGroup它的本质是容器 AdapterView派生了3个子类: AbsListView AbsSpin ...
- Android学习笔记——ListView
该工程的功能是实现在一个activity中显示一个列表 以下代码是MainActivity.java中的代码 package com.example.listview; import java.uti ...
- [Android学习笔记]ListView中含有Button导致无法响应onItemClick回调的解决办法
转自:http://www.cnblogs.com/eyu8874521/archive/2012/10/17/2727882.html 问题描述: 当ListView的Item中的控件只是一些展示类 ...
- Android笔记: ListView基本用法-ArrayAdapter
ListView实现过程: 新建适配器->添加数据源到适配器->视图加载适配器 数据适配器: 把复杂的数据(数组.链表.数据库.集合等)填充在制定的试图界面上. 两种常用数据适配器 Arr ...
- 安卓笔记-- ListView点击和长按监听
其中点击监听为setOnItemClickListener() 具体实现代码如下 listView.setOnItemClickListener(new AdapterView.OnItemClick ...
- 安卓开发笔记——ListView加载性能优化ViewHolder
在前不久做安卓项目的时候,其中有个功能是爬取某网站上的新闻信息,用ListView展示,虽然做了分页,但还是觉得达不到理想流畅效果. 上网查阅了些资料,发现一些挺不错的总结,这里记录下,便于复习. 当 ...
- Android开发笔记——ListView模块、缓存及性能
ListView是Android开发中最常用的组件之一.本文将重点说明如何正确使用ListView,以及使用过程中可能遇到的问题. ListView开发模块 图片缓存 可能遇到的问题 一.ListVi ...
- Android学习笔记-listview实现方式之BaseAdapter
listview是Android开发中最为常用的组件,这里我们就学习一下用BaseAdapter的方式实现listview, 主布局activity_main.xml是这样的: <LinearL ...
- 安卓开发笔记——打造万能适配器(Adapter)
为什么要打造万能适配器? 在安卓开发中,用到ListView和GridView的地方实在是太多了,系统默认给我们提供的适配器(ArrayAdapter,SimpleAdapter)经常不能满足我们的需 ...
- Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计
Volley是由Google开源的.用于Android平台上的网络通信库.Volley通过优化Android的网络请求流程,形成了以Request-RequestQueue-Response为主线的网 ...
随机推荐
- 从客户端(Content="<p>测试</p>")中检测到有潜在危险的 Request.Form 值
.NetFrameWork 4.0 Validaterequest="false"不起作用 要恢复到2.0的ASP.NET请求验证功能的行为,要在以下设置 Web.config中 ...
- Jquery设置Cookie
jQuery代码: <script src="js/jquery-1.3.1.js" type="text/javascript"></scr ...
- ThinkPHP 3.2.3(二)配置
一.配置格式 1.PHP数组定义 默认所有配置文件的定义格式均采用返回PHP数组的方式,配置参数不区分大小写. 如果使用二维数组来配置更多的信息,则二级参数配置区分大小写.格式为: //项目配置文件r ...
- Sql:多行合并一行以及多条数据取时间最早的那条
有两个导数据的需求,1.一张表里面每一个订单号可能对应多条数据,每个单号返回时间最早的那条. 2.根据条件查询某个字段并按照逗号,合并在一起. 表类似结构如下: 第一条sql:select c.Id, ...
- Eclipse Android 解决Gen文件夹为空的问题
通常这个问题的表现为Eclipse报错:R cannot be resolved to a variable 原因是因为Eclipse没有帮我们自动生成固定资源的索引.导致Gen文件夹下为空. 网上的 ...
- VS2003"无法启动调试 没有正确安装调试器"的解决办法
VS2003"无法启动调试 没有正确安装调试器"的解决方法 在用VS2003做项目的时候,经常调试程序,但是有时候回出现如下问题“无法启动调试,没有正确安装调试器,请运行安装程序或 ...
- restful 部署 PUT,DELETE 请求发生405 谓词Http不允许
在部署Restful服务的时候,发现中间有个PUT请求的服务,报405 谓词HTTP 不允许解决方法:卸载WebDav 如果不行可以尝试下另一种方式:
- Java集合类学习笔记(Queue集合)
Queue集合用于模拟队列(先进先出:FIFO)这种数据类型. Queue有一个Deque接口,代表一个"双端队列",双端队列可以同时从两端来添加.删除元素,因此Deque的实现类 ...
- PHP文件的读取
1.PHP部分文件操作函数 ( fopen ,fread ,filesize,fwrite,fclose ) 2.unlink() rmdir() 删除函数 unlink(路径和文件名): rmdi ...
- mysql TIMESTAMP 设置为可NULL字段
今天遇到问题是mysql新建表的时候TIMESTAMP 类型的字段 默认是NOT NULL 然后上网查了一下 发现 很多都说 就是不能为NULL的 这都什么心态 其实设置为空很简单 只要在字段后面加上 ...