文档章节

android中ListView的使用

ht896632
 ht896632
发布于 2016/03/02 14:07
字数 1133
阅读 12
收藏 0
点赞 1
评论 0

1.ListView显示数据

绑定数据的方法:可以通过适配器来进行绑定,系统提供了两个适配器(SimpleAdapter、SimpleCursorAdapter),

同时也可以自定义适配器,因为在有些时候,系统提供的适配器并不能满足我们的需求。

SimpleAdapter:

private void show1() {
		//获取一个集合列表
		List<User> users = userService.getScrollData(0, 20);
		//将普通list集合封装为SimpleAdapter所需要的List<HashMap<String, Object>>集合
		List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
		for (User user : users) {
			HashMap<String, Object> item = new HashMap<String, Object>();
			item.put("id", user.getId());
			item.put("name", user.getName());
			item.put("age", user.getAge());
			item.put("amount", user.getAmount());
			data.add(item);
		}
		/**
		 * 第一个参数:当前对象 第二个参数:要绑定的数据,类型为List<HashMap<String, Object>>
		 * 第三个参数:要绑定到哪个资源文件 第四个参数:
		 */
		SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,
				new String[] { "name", "age", "amount" }, new int[] {
						R.id.name, R.id.age, R.id.amount });
		listView.setAdapter(adapter);
	}
SimpleCursorAdapter:

private void show2() {
		//返回一个Cursor对象
		Cursor cursor = userService.getCursorScrollData(0, 20);
		// 使用Cursor是配器会出现如下错误:
		// 04-16 12:39:40.699: ERROR/AndroidRuntime(378): FATAL EXCEPTION: main
		// 04-16 12:39:40.699: ERROR/AndroidRuntime(378):
		// java.lang.RuntimeException: Unable to start activity
		// ComponentInfo{cn.kafei.db/cn.kafei.db.DbActivity}:
		// java.lang.IllegalArgumentException: column '_id' does not exist
		// 04-16 12:39:40.699: ERROR/AndroidRuntime(378): Caused by:
		// java.lang.IllegalArgumentException: column '_id' does not exist
		// 解决方案:为实体类id属性改为_id,或者在查询数据库时将主键ID重命名为_id;select id as _id from user
		SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
				R.layout.item, cursor,
				new String[] { "name", "age", "amount" }, new int[] {
						R.id.name, R.id.age, R.id.amount });
		listView.setAdapter(adapter);
	}
自定义适配器:

说明:自定义适配器需要继承BaseAdapter适配器,并且重写它的方法

示例:

import java.util.List;

import cn.kafei.db.R;
import cn.kafei.pojo.User;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class UserAdapter extends BaseAdapter {
	private List<User> users;// 绑定的数据
	private int resource;// 绑定的条目界面
	private LayoutInflater inflater;// 布局填充器

	public UserAdapter(Context context, List<User> users, int resource) {
		this.users = users;
		this.resource = resource;
		inflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);// 取得系统内置的布局填充器
	}

	/**
	 * 获得记录总数
	 */
	@Override
	public int getCount() {
		return users.size();
	}

	/**
	 * 取得某个索引对应的对象
	 */
	@Override
	public Object getItem(int position) {
		return users.get(position);
	}

	/**
	 * 取得条目的索引
	 */
	@Override
	public long getItemId(int position) {
		return position;
	}

	/**
	 * position:要绑定的数据条目在集合中的索引值
	 */
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		TextView nameView = null;
		TextView ageView = null;
		TextView amountView = null;
		// 如果等于空,表示显示的是第一页,如果不是第一页,传进来的是缓存的对象
		if (convertView == null) {
			// 生成条目界面对象
			convertView = inflater.inflate(resource, null);
			// 查找控件
			nameView = (TextView) convertView.findViewById(R.id.name);
			ageView = (TextView) convertView.findViewById(R.id.age);
			amountView = (TextView) convertView.findViewById(R.id.amount);
			// 缓存控件
			ViewCache cache = new ViewCache();
			cache.nameView = nameView;
			cache.ageView = ageView;
			cache.amountView = amountView;
			convertView.setTag(cache);// 利用视图标志放入缓存对象
		} else {
			// 取出缓存的控件
			ViewCache cache = (ViewCache) convertView.getTag();
			nameView = cache.nameView;
			ageView = cache.ageView;
			amountView = cache.amountView;
		}

		User user = users.get(position);
		// 实现数据绑定
		nameView.setText(user.getName());
		ageView.setText(user.getAge().toString());// int型的需要转换为string类型否则会报错
		amountView.setText(user.getAmount().toString());
		return convertView;
	}

	/**
	 * 缓存数据,避免每次都进行查找控件,以提高性能 这里没有使用getter
	 * setter方法进行赋值,主要是考虑到虚拟机加载到内存的文件大小,节省内存开销,当然这个影响不是很大,可以忽略
	 * 
	 */
	private final class ViewCache {
		public TextView nameView;
		public TextView ageView;
		public TextView amountView;
	}
}
使用方法:

/**
	 * 自定义适配器实现数据的绑定
	 */
	private void show3() {
		//返回数据集合
		List<User> users = userService.getScrollData(0, 20);
		//当前对象、数据集合、要引用的资源文件
		UserAdapter adapter = new UserAdapter(this, users, R.layout.item);
		listView.setAdapter(adapter);
	}
2.如何获取ListView中显示的数据

首先:为ListView注册setOnItemClickListener监听器,意思是当点击ListView中的任何一个条目时触法(调用)

监听器实现:

/**
	 * 当listView的条目被点击后调用
	 */
	private final class ItemClickListener implements OnItemClickListener {
		/**
		 * 第一个参数:点击条目所在的ListView 第二个参数:当前点击条目的view对象,也就是界面对象
		 * 第三个参数:当前点击条目在绑定集合中的所引值
		 */
		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			ListView lView = (ListView) parent;
			// 自定义适配器,如果ListView绑定的是一个对象集合,也就是每一条数据代表一个实体对象,可以使用这种方式进行获取
			// User
			// user=(User)lView.getItemAtPosition(position);//根据索引取得在集合中所对应的条目
			// <==================================================================>
			
			// 如果ListView是用SimpleCursorAdapter进行绑定数据的可以使用这样的方式进行获取数据
			// Cursor cursor = (Cursor) lView.getItemAtPosition(position);
			// int userId = cursor.getInt(cursor.getColumnIndex("_id"));
			// <==================================================================>
			
			// 如果ListView是用SimpleAdapter进行绑定数据的可以使用这样的方式进行获取数据
			HashMap<String, Object> data = (HashMap<String, Object>) lView
					.getItemAtPosition(position);
			Toast.makeText(getApplicationContext(), data.get("id").toString(),
					1).show();
		}
	}

为listView绑定监听器

listView.setOnItemClickListener(new ItemClickListener());


© 著作权归作者所有

共有 人打赏支持
ht896632
粉丝 35
博文 53
码字总数 31361
作品 0
闵行
高级程序员
转: Android ListView 滑动背景为黑色的解决办法

在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android:back...

vane_
2012/05/25
0
0
Android ListView 滑动背景为黑色的解决办法 listview小知识整理

在别的地方看到的,转过来作为记录!! 在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备...

假装是大神
2012/12/20
0
0
Android Your content must have a ListView whose...

Android Your content must have a ListView whose id attribute is 'android.R.id.list'错误的解决办法 在Android开发中,ListView有着很重要的地位,使用的场合也非常的多 错误提示:Your ...

哈全文
2012/04/21
0
0
android中listview的一些样式设置

在Android中,ListView是最常用的一个控件,在做UI设计的时候,很多人希望能够改变一下它的背景,使他能够符合整体的UI设计,改变背景背很简单只需要准备一张图片然后指定属性 android:back...

子曰疯
2013/10/29
0
1
ScrollView 与ListView共存会存在滚动的问题

ScrollView 与ListView共存会存在滚动的问题,并且ListView只显示一个半Item。 当ListView的高度设定一定的值时,ListView同样地会显示对应的高度的Item。 因此我们可以计算出这个ListView的...

Jonson
2013/01/06
0
1
0711 listview属性

android:cacheColorHint 控制item某个组件不出现黑色背景色 android:cacheColorHint=“#00000000” ListView 在Android中可以说随处可见,在自定义背景上使用ListView,当List滚动的时候会发现...

广阔
2012/07/11
0
0
android中的selector背景选择器

关于listview和button都要改变android原来控件的背景,在网上查找了一些资料不是很全,所以现在总结一下android的selector的用法。 首先android的selector是在drawable/xxx.xml中配置的。 先...

泡泡爸爸
2013/03/17
0
0
Android 完美的水平方向滑动ListView

在Android开发 中,经常会要用到水平水平ListView(HorizontalListView),但是,Android 官方并没有提供这样一个控件, 所以在这里我给大家分享一下我在项目中用到的一个水平水平ListView,非常好用...

柳絮飘飞
2015/03/14
0
2
android 的listactivity

本文转自:http://android.tgbus.com/ 今天学习点轻松的内容吧,看看android.app包里的几个类。首先是这个在平台自的例子中被广泛使用的ListActivity。这个类其实就是一个含有一个ListView组...

xiahuawuyu
2012/05/23
0
0
view-ListView学习

LiastView网上有很多,推荐如下: 1、android ListView详解: http://www.cnblogs.com/allin/archive/2010/05/11/1732200.html 2、Android中ListView的性能问题 http://android.tgbus.com/A......

工作日
2011/12/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Spring5 beans 接口实例化 代理Bean操作 ...

小致dad
6分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
9
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
200
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部