博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android中ListView的使用
阅读量:6000 次
发布时间:2019-06-20

本文共 5538 字,大约阅读时间需要 18 分钟。

hot3.png

1.ListView显示数据

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

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

SimpleAdapter:

private void show1() {		//获取一个集合列表		List
users = userService.getScrollData(0, 20); //将普通list集合封装为SimpleAdapter所需要的List
>集合 List
> data = new ArrayList
>(); for (User user : users) { HashMap
item = new HashMap
(); item.put("id", user.getId()); item.put("name", user.getName()); item.put("age", user.getAge()); item.put("amount", user.getAmount()); data.add(item); } /** * 第一个参数:当前对象 第二个参数:要绑定的数据,类型为List
> * 第三个参数:要绑定到哪个资源文件 第四个参数: */ 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
users;// 绑定的数据 private int resource;// 绑定的条目界面 private LayoutInflater inflater;// 布局填充器 public UserAdapter(Context context, List
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
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
data = (HashMap
) lView .getItemAtPosition(position); Toast.makeText(getApplicationContext(), data.get("id").toString(), 1).show(); } }

为listView绑定监听器

listView.setOnItemClickListener(new ItemClickListener());

转载于:https://my.oschina.net/ht896632/blog/628433

你可能感兴趣的文章
modelform实例学习
查看>>
EF CRUD
查看>>
初识python:time 模版
查看>>
mysql慢查询日志分析工具mysqldumpslow
查看>>
4.09.1
查看>>
电话本管理程序(实现增删改查功能)
查看>>
LOCK_TIMEOUT
查看>>
Python脱产8期 Day29 2019/5/24
查看>>
学c#语言的感想
查看>>
Windows 驱动模型的发展历史
查看>>
Android视图的截图
查看>>
App列表之分组ListView
查看>>
Android&iOS崩溃堆栈上报
查看>>
关于iOS开发的各种证书
查看>>
【Openjudge】 算24
查看>>
lvreduce -L 1000M /dev/vg0/lv0 表示最后缩减至多大,不是减少了多大
查看>>
ES 自动恢复分片的时候不恢复了是磁盘超过了85%,然后不恢复了 ES可以配置多个数据目录...
查看>>
linux查杀病毒的几个思路
查看>>
宽带速度
查看>>
构建之法阅读笔记5
查看>>