`

Listview控件使用

 
阅读更多

 

Listview 功能:1)列表数据的展示  2)用户点击或选中处理 

创建ListView大体步骤: 1)提供数据的List<Map> 2)创建adapter并关联相应的布局和数据  3)ListView设置相应的adapter 

类型:1 普通的展示列表  2 带有单选和复选操作的展示列表  3 自定义每一行view的对象展示列表(可以显示图片等)4 使用BaseAdapter优化列表  

 

 

代码: 

   1 Log.v("MyListViewBase", "你点击了按钮" + position); // 可以打印信息到  android的控制台 

   2 convertView.setTag(holder); setTag可以在一个对象上绑定一个对象组  

 

package com.example.fragmentdemo1;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

 


import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Listview的使用
 * 
 * @author root 参考 :
 * http://www.cnblogs.com/noTice520/archive/2011/12/05/2276379.html
 *
 */
public class ListViewActivity extends Activity {
	
	private static final String[] strs = new String[] { "first", "second",
			"third", "fourth", "fifth" };
	private ListView lv; //显示数据的listView对象 
	//绑定数据
	private ArrayList<HashMap<String, Object>> listData;
	
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.list_view_test);
		lv = (ListView) findViewById(R.id.listview);
		// showArrayAdapterList();
		// showSimpleAdapterList();
		
		showBaseAdapterList();
	}

	/**
	 * ArrayAdapter 的使用 : 用来绑定一个数组,支持泛型操作 
	 * 一、列表的样式设置,以及是否可以选择、单选与多选的控制 
	 * 1 只作为列表展示
	 * 2 后面有个对号的列表展示,可以设置单选和多选 
	 * 3 带有 复选框的列表展示,可以单选和多选 
	 * 4 带有radio的列表展示,可以单选和多选
	 */
	private void showArrayAdapterList() {

		// 最简单的listView只作为展示
		// ArrayAdapter<String> adapter = new
		// ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,strs);
		// 可以进行多选,每一行后面有个“对号”
		// ArrayAdapter<String> adapter = new
		// ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked,strs);
		// 带有复选框的 列表
		// ArrayAdapter<String> adapter = new
		// ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,strs);
		// 带有 radio的列表
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_single_choice, strs);
		lv.setAdapter(adapter);

		// 如果需要选择功能需要进行这个设置: 单选、多选 给的参数不一样
		lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);// 多选
		// lv.setChoiceMode( ListView.CHOICE_MODE_SINGLE );//单选

		lv.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> adapter, View view,
					int adapterPosId, long rowId) {
				setTitle("你点击了第" + rowId + "行");
				// 得到单击的这一行的数据 :数组和下标 strs[adapterPosId] 、adapterPosId:数组的下标位置
				// 、rowId :单击的是哪一行
				Toast.makeText(getApplicationContext(),
						"你点击了第" + rowId + "行" + strs[adapterPosId],
						Toast.LENGTH_SHORT).show();
			}
		});
	}

	/**
	 * SimpleAdapter的使用,可以自定义列表中的布局, 用来绑定在xml中定义的控件对应的数据 1 数据:List<Map>的形式 2
	 * 创建SimpleAdapter: 1)每一个map就是一行数据 2) 每一行对应的数据根据adapter中对应的key映射到Map的key上 3
	 * 添加点击事件
	 */
	private void showSimpleAdapterList() {

		/* 定义一个动态数组 */
		final ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
		/* 在数组中存放数据 */
		for (int i = 0; i < 10; i++) {
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("ItemImage", R.drawable.icon);// 加入图片
			map.put("ItemTitle", "第" + i + "行title");
			map.put("ItemText", "这是第" + i + "行text");
			listItem.add(map);
		}

		SimpleAdapter mSimpleAdapter = new SimpleAdapter(this,
				listItem,// 需要绑定的数据
				R.layout.simple_list_view_adapter,// 每一行的布局
				// 动态数组中的数据源的键对应到定义布局的View中
				new String[] { "ItemImage", "ItemTitle", "ItemText" },
				new int[] { R.id.ItemImage, R.id.ItemTitle, R.id.ItemText });
		lv.setAdapter(mSimpleAdapter);// 为ListView绑定适配器
		lv.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> adapter, View view,
					int adapterPosId, long rowId) {
				setTitle("你点击了第" + rowId + "行");// 设置标题栏显示点击的行
				// 取出单击这一行的Map
				Map dataMap = listItem.get(Integer.parseInt(rowId + ""));

				Toast.makeText(
						getApplicationContext(),
						"你点击了第" + rowId + "行" + dataMap.get("ItemTitle") + "  "
								+ dataMap.get("ItemText"), Toast.LENGTH_SHORT)
						.show();
			}
		});
	}

	/**
	 * 1 在list中添加按钮 ,响应事件 
	 * 2 优化list显示,使加快显示速度(重用list中行的view对象和对象查找时间)
	 */
	private void showBaseAdapterList() {
		listData = getData(); //准备数据 
		MyAdapter mAdapter = new MyAdapter(this);// 得到一个MyAdapter对象
		lv.setAdapter(mAdapter);// 为ListView绑定Adapter
		/* 为ListView添加点击事件 */
		lv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				Log.v("MyListViewBase", "你点击了ListView条目" + arg2);// 在LogCat中输出信息

			}
		});
	}

	/* 添加一个得到数据的方法,方便使用 */
	private ArrayList<HashMap<String, Object>> getData() {

		ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
		/* 为动态数组添加数据 */
		for (int i = 0; i < 30; i++) {
			HashMap<String, Object> map = new HashMap<String, Object>();
			map.put("ItemTitle", "第" + i + "行");
			map.put("ItemText", "这是第" + i + "行");
			listItem.add(map);
		}
		return listItem;

	}

	/*
	 * 新建一个类继承BaseAdapter,实现视图与数据的绑定
	 */
	private class MyAdapter extends BaseAdapter {

		private LayoutInflater mInflater;// 得到一个LayoutInfalter对象用来导入布局

		/* 构造函数 */
		public MyAdapter(Context context) {
			this.mInflater = LayoutInflater.from(context);
		}

		@Override
		public int getCount() {
			return listData.size();// 返回数组的长度
		}

		@Override
		public Object getItem(int position) {
			return null;
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}

		/**
		 * 个人理解:
		 *   position: 列表的第几行控件调用了这个对象 
		 *   convertView: 在列表中position这一行对应加载数据的控件,滚动屏幕的时候View会被重用 (新滚动出来的view行就是上面消失的view对象)
		 *   
		 *   主要作用:1 加载行的布局view 2 加载行中每个控件的数据  3 重用convertView对象 
		 *   
		 */
		@Override
		public View getView(final int position, View convertView,
				ViewGroup parent) {
			ViewHolder holder;
			// 观察convertView随ListView滚动情况
			Log.v("MyListViewBase", "getView " + position + " " + convertView);
			if (convertView == null) {
				convertView = mInflater.inflate(R.layout.simple_list_view_baseadapter, null);
				holder = new ViewHolder();
				/* 得到各个控件的对象 */
				holder.title = (TextView) convertView
						.findViewById(R.id.ItemTitle);
				holder.text = (TextView) convertView
						.findViewById(R.id.ItemText);
				holder.bt = (Button) convertView.findViewById(R.id.ItemButton);
				convertView.setTag(holder);// 绑定ViewHolder对象,就是讲当前的对象存储到convertView
			} else {
				holder = (ViewHolder) convertView.getTag();// 取出ViewHolder对象
			}
			/* 设置TextView显示的内容,即我们存放在动态数组中的数据 */
			holder.title.setText(listData.get(position).get("ItemTitle")
					.toString());
			holder.text.setText(listData.get(position).get("ItemText")
					.toString());

			/* 为Button添加点击事件 */
			holder.bt.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					Log.v("MyListViewBase", "你点击了按钮" + position); // 打印Button的点击信息

				}
			});
			return convertView;
		}
	}

	/* 存放控件  */
	public final class ViewHolder {
		public TextView title;
		public TextView text;
		public Button bt;
	}
}

 

 

分享到:
评论

相关推荐

    C# Listview控件使用实例

    ### C# ListView 控件使用详解 #### 一、概述 `ListView` 控件是一种非常强大的 Windows Forms 控件,用于以多种视图(如图标、详细信息、列表等)展示项目集合。它支持自定义列、排序、筛选等功能,并且可以轻松...

    winform c# listview控件使用范例源码

    winform c# listview控件使用范例源码,包括以下范例,listview控件的各种高级使用范例,很齐全。 ActiveGrid.rar ColorListBox.zip DragDropListView.rar ExCheckedListBox.rar EXListView.rar ...

    ListView控件使用测试

    在这个“ListView控件使用测试”项目中,我们将深入探讨如何在VB环境下有效地利用ListView控件,特别是其报告视图的运用。 在VB(Visual Basic)环境中,ListView控件是通过System.Windows.Forms命名空间下的...

    ListView控件使用简介

    在本文中,我们将深入探讨ListView控件的基本使用方法,包括创建列头、添加项和子项,以及读取选中项的信息。 首先,创建ListView的列头是非常关键的步骤,它定义了数据的分类。例如,你可以通过以下代码创建一个...

    VBA实战系列(ListView控件)

    加载数据是ListView控件使用的最后一步,通常涉及从外部数据源读取数据并将其插入到控件中。这里以从Access数据库加载数据为例: ```vba Sub ListDisp() Dim cn As Object, rs As Object, sql As String, Itm Set...

    C#ListView控件使用简单例子源码

    C#ListView控件使用简单例子源码(VS2008及以上版本). 程序实现功能:选择以“大图标”、“小图标”、“详细信息”、“列表”形式显示项;添加、删除、清空项。 (ps:本人也是正在学习C#编程,顺便分享一下学习所得;...

    使用TreeView和listView控件查看本机磁盘文件夹及文件(WinForm)

    3. 使用 ImageList 控件提供图像资源:ImageList 控件用于提供图像资源,供 TreeView 和 ListView 控件使用。 ImageList 控件可以添加多个图像资源,每个图像资源都有一个唯一的索引值。TreeView 和 ListView 控件...

    listView控件综合应用

    首先,ListView控件的基础使用包括在设计界面中添加控件、设置其属性以及响应事件。在VB6.0的工具箱中找到ListView控件,将其拖放到窗体上。常见的属性有:`View`用于设置视图模式,`ColumnHeaders`用于定义列头,`...

    ListView控件使用CheckBoxes属性实现单选功能

    通过以上步骤,我们就可以在C# WinForm的ListView控件中实现使用CheckBoxes属性的单选功能。这种方法简单有效,且易于理解和维护。不过,需要注意的是,对于大量数据的ListView,频繁的ItemChecked事件可能会导致...

    vba 日期控件和listview控件注册

    在WPS Office中,有时会遇到不同版本的内置控件不兼容的问题,比如日期控件和ListView控件。本教程将详细介绍如何在VBA中注册并使用这些控件,以克服兼容性问题。 1. **VBA日期控件**: VBA中的日期控件通常指的是...

    安卓手机 ListView控件的三种使用方式

    本教程将详细讲解如何在安卓手机上使用ListView控件,从基础到进阶,通过四个案例来帮助开发者掌握其精髓。 **一、ListView基本使用** 1. **布局文件**:首先,在XML布局文件中添加ListView,例如`activity_main....

    VC++2008 ListView控件

    VC++2008 ListView控件使用详解 ListView控件是VC++2008中常用的控件之一,用于显示列表信息。在VC++2008中,ListView控件可以通过设置扩展样式来实现各种展示效果,例如网格线、整行选择、始终显示选择项等。 ...

    C# ListView控件使用 添加 删除 按列升序降序排列

    在这个教程中,我们将深入探讨如何在Visual Studio 2008环境下使用ListView控件进行添加、删除以及按列进行升序或降序排列的操作。 首先,让我们了解ListView控件的基本结构。ListView由多个列(ColumnHeader)和行...

    ListView控件使用实例

    以上就是关于ListView控件的基本使用及结合数据库的实例介绍。通过这个例子,你可以了解到如何在Android应用中创建、填充ListView,并结合SQLite数据库进行数据管理。这只是一个基础的示例,实际项目中可能需要根据...

    演示Android的ListView控件的使用

    环境:Windows XP SP3、JDK 1.6、Android SDK...目的:熟悉ListView控件的用法--使用ListView必须让Activity继承ListActivity类,并且在main.xml布局描述文档中,ListView类的android.id必须是"@+id/android:list”值。

    C#listView控件的使用

    在C#编程中,ListView控件是一个非常常用且功能强大的组件,主要用于展示数据集,它提供了多种视图模式,如大图标、小图标等,并支持添加、删除项以及复选框功能。本教程将深入讲解如何利用C#的ListView控件进行开发...

    C#ListView控件使用简单例子源代码

    开发环境:Win7,VS2008 ...为控件中的项分组;添加、删除(选中项)、清空项。 (ps:本人也是正在学习C#编程,顺便分享自己的学习成果给大家,希望能给大家有所帮助~~,另外感觉代码结构有些混乱~~)

    treeview listview控件使用

    总之,`TreeView`和`ListView`控件在Windows编程中扮演着重要的角色,通过熟练掌握它们的使用,可以创建出功能丰富的文件管理类应用程序。在实际开发中,结合具体的编程语言和框架,如MFC、WinForms、WPF等,会有...

    Listview控件用法,listview控件,.net控件,.net listview控件用法

    下面将详细介绍ListView控件的使用方法、特性以及如何在.NET环境中进行操作。 1. 添加和删除列 在ListView控件中,数据通常以列的形式展示。你可以通过调用`Columns`属性来添加新的列。例如: ```csharp ...

    listview控件可有4种不同的视图显示方法 (1).docx

    ListView 控件可有 4 种不同的视图显示方法 ListView 控件是 Windows 操作系统中的一种常用控件,能够显示大量的数据,并提供了多种视图显示方法。根据不同的应用场景,可以选择适合的视图显示方法。 一、视图显示...

Global site tag (gtag.js) - Google Analytics