android ListView用法介绍
ListView在Android开发中是比较常用的组件,它是以列表的形式展示内容,并且还可以处理用户的选择与点击等操作;
LIstView显示数据一般需要三方面:
(1)ListView组件:用来展示列表的View;
(2)数据:填充到View中的文字,图片等;
(3)适配器:连接ListView与数据的适配器;
适配器,是连接数据和AdapterView的桥梁(ListView是AdapterView的子类),通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便;
常用的适配器有以下几种:
ArrayAdapter<T> 用来绑定一个数组,支持泛型操作;
SimpleAdapter 用来绑定在XML中定义的控件对应的数据,有很好的扩充性,可以自定义出各种效果;
SimpleCursorAdapter 可以理解为与数据库的简单结合,可以方便的把数据库的内容以列表的形式展示出来;
BaseAdapter 基础数据适配器;
1.使用ArrayAdapter来展示内容
效果如下:
layout有两个,都很简单;
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.xiaozhang.listview2.MainActivity" > <ListView android:id="@+id/listView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>
listview.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="textView" android:textSize="20sp" /> </LinearLayout>
MainActivity.java
package com.xiaozhang.listview2; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends Activity { private String[] str = new String[] { "listView1", "listView2", "listView3", "listView4", "listView5" }; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str)); } }
非常简单,下面分析一下使用的步骤:
(1)定义一个数组来存放ListView中item的内容。
(2)通过实现ArrayAdapter的构造函数来创建一个ArrayAdapter的对象。
(3)通过ListView的setAdapter()方法绑定ArrayAdapter。
其中第二步有必要说一下的是,ArrayAdapter有多个构造函数,例子中实现的是最常用的一种。第一个参数为上下文,第二个参数为一个包含TextView,用来填充ListView的每一行的布局资源ID。第三个参数为ListView的内容。其中第二个参数可以自定义一个layout,但是这个layout必须要有TextView控件。
(1)通过指定android.R.layout.simple_list_item_checked这个资源,实现带选择框的ListView。需要用setChoiceMode()方法设定选择为多选还是单选,否则将不能实现选择效果;
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, str)); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
运行效果如图:
(2)通过指定android.R.layout.simple_list_item_multiple_choice这个资源实现带CheckBox的ListView。同样的,需要用setChoiceMode()方法来设置单选或者多选;
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, str)); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
运行效果如图:
(3)通过指定android.R.layout.simple_list_item_single_choice这个资源实现带RadioButton的ListView。这里要注意的是,这里并不是指定了单选。是多选还是单选要通过setChoiceMode()方法来指定;
listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_single_choice, str)); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
(4)具体R.layout的属性可参考API:
在前面讲到过,ListView的职责除了填充数据外,还要处理用户的操作。通过如下的代码就可以为ListView绑定一个点击监听器,点击后在标题栏显示点击的行数。
listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // 点击后在标题上显示点击了第几行 setTitle("你点击了第" + arg2 + "行"); } });
2.使用SimpleAdapter来展示内容
很多时候需要在列表中展示一些除了文字以外的东西,比如图片等。这时候可以使用SimpleAdapter。SimpleAdapter的使用也非常简单,同时它的功能也非常强大。可以通过它自定义ListView中的item的内容,比如图片、多选框等。
看一个例子,实现一个每一行都有一个ImageView和TextView的ListView。先看一下运行效果:
点击其中一行,看标题的变化:
长按其中一行:
点击长按菜单:
实现步骤为:
(1)首先在activity_main.xml中增加一个ListView控件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout01" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/ListView01" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
(2)再定义一个布局文件,用RelativeLayout来实现一个带两行字和一个图片的布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout01" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingBottom="4dp" android:paddingLeft="12dp" android:paddingRight="12dp" > <ImageView android:id="@+id/ItemImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:paddingTop="12dp" /> <TextView android:id="@+id/ItemTitle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="TextView01" android:textSize="25dp" /> <TextView android:id="@+id/ItemText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/ItemTitle" android:text="TextView02" /> </RelativeLayout>
(3)添加图片right.png到项目中,为了简单点,直接放在drawable-hdpi中;
(4)在MainActivity中绑定数据,实现点击事件及长按事件;
package com.xiaozhang.listview3; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.view.View.OnCreateContextMenuListener; import android.widget.AdapterView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.AdapterView.OnItemClickListener; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 绑定Layout里面的ListView ListView list = (ListView) findViewById(R.id.ListView01); // 定义动态数组,加入数据 ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>(); for (int i = 0; i < 20; i++) { HashMap<String, Object> map = new HashMap<String, Object>(); // 加入图片,图像为right.png map.put("ItemImage", R.drawable.right); map.put("ItemTitle", "the line is: " + i); map.put("ItemText", "the lien number is: " + i); listItem.add(map); } /* * 第二个参数:需要绑定的数据; * 第三个参数:将动态数组中的数据的键对应到布局文件listview.xml中; * 第四个参数:动态数组与ImageItem对应的子项 * 第五个参数:listview.xml文件里面的一个ImageView,两个TextView的ID */ SimpleAdapter listItemAdapter = new SimpleAdapter(this, listItem, R.layout.listview, new String[] { "ItemImage", "ItemTitle", "ItemText" }, new int[] { R.id.ItemImage, R.id.ItemTitle, R.id.ItemText }); // 为ListView绑定适配器 list.setAdapter(listItemAdapter); // 添加点击事件 list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //设置标题栏显示 setTitle("点击第" + arg2 + "个项目"); } }); // 添加长按点击事件 list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.setHeaderTitle("长按菜单-ContextMenu"); menu.add(0, 0, 0, "长按菜单0"); menu.add(0, 1, 0, "长按菜单1"); menu.add(0, 2, 0, "长按菜单2"); } }); } // 长按菜单响应函数 @Override public boolean onContextItemSelected(MenuItem item) { setTitle("点击了长按菜单里面的第" + item.getItemId() + "个项目"); return super.onContextItemSelected(item); } }
使用simpleAdapter的数据一般都是用HashMap构成的列表,列表的每一节对应ListView的每一行。通过SimpleAdapter的构造函数,将HashMap的每个键的数据映射到布局文件中对应控件上。这个布局文件一般根据自己的需要来自己定义。梳理一下使用SimpleAdapter的步骤。
(1)根据需要定义ListView每行所实现的布局文件。
(2)定义一个HashMap构成的列表,将数据以键值对的方式存放在里面。
(3)构造SimpleAdapter对象。
(4)将ListView绑定到SimpleAdapter上。
本文是转自:
http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html
http://www.iteye.com/topic/540423
android ListView用法介绍的更多相关文章
- android ListView的介绍和优化
xml设计 <?xml version="1.0"?> -<RelativeLayout tools:context=".MainActivity&qu ...
- Android ListView用法
写了一个简单的示例来说明ListView的用法:给定一个单词,下面有四个含义,找出正确的一个,无论是否成功,则会跳转到下一个单词:主要用到的知识有: findViewById(). ListView ...
- Android.mk 用法介绍
一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...
- Android GridView用法介绍
GridView(网格视图)是按照行和列的方式来显示内容的,一般用于显示图片等内容,比如实现九宫格图: 第一个例子: 实现代码为: MainActivity.java package com.xiao ...
- xamarin android listview的用法
listview也许是用的非常频繁的一个控件之一,下面我写一个xamarin的listview栗子,大家尝一尝xamarin android开发的乐趣.原谅我的大小写吧. listview绑定自定义的 ...
- 怎么通过activity里面的一个按钮跳转到另一个fragment(android FragmentTransaction.replace的用法介绍)
即:android FragmentTransaction.replace的用法介绍 Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,他们之间最 ...
- Android listview与adapter用法(BaseAdapter + getView)
Android listview与adapter用法http://www.cnblogs.com/zhengbeibei/archive/2013/05/14/3078805.html package ...
- Android ListView OnItemLongClick和OnItemClick事件内部细节分享以及几个比较特别的属性
本文转自 http://blog.sina.com.cn/s/blog_783ede030101bnm4.html 作者kiven 辞职3,4个月在家休息,本以为楼主要程序员逆袭,结果失败告终继续码农 ...
- [置顶]
android ListView包含Checkbox滑动时状态改变
题外话: 在xamarin android的开发中基本上所有人都会遇到这个小小的坎,的确有点麻烦,当时我也折腾了好一半天,如果你能看到这篇博客,说明你和我当初也是一样的焦灼,如果你想解决掉这个小小的坎 ...
随机推荐
- 从一个聊天信息引发的思考之Android事件分发机制
转载请声明:http://www.cnblogs.com/courtier/p/4295235.html 起源: 我在某一天看到了下面的一条信息(如下图),我想了下(当然不是这 ...
- [Flask]学习Flask第三天笔记总结
from flask import Flask,render_template,request from others import checkLogin app = Flask(__name__) ...
- Android Studio 初体验
Google在I/O */
- C++沉思录之一
一.系统跟踪类Trace的设计过程: step1:简单版 class Trace { public: Trace() { noisy = ; } void print(char* s) { if(no ...
- 显示目录树命令tree
-a:显示所有文件,包括隐藏文件 -d:只显示目录 -f:显示完整的文件名,包含路径 -L:显示目录树的深度 [root@rusky /]# tree -L -a -f /home /home |-- ...
- css伪类选择器详细解析及案例使用-----伪类选择器(2)
结构伪类选择器: <div> <ul> /*ul:only-of-type*/ <li>one</li> /*li:first-child li:nth ...
- 从html字符串中获取div内容---jquery
思考的问题: 怎么在一个网页的div中嵌套另外的网页(不使用inclue,iframe和frame,不使用他们的原因,include只能嵌套静态网页,iframe对网络爬虫影响,frame嵌套网页无法 ...
- Android(性能)
■ 数据传输 对象和字节流之间的转换 为什么要转? 持久化(装逼说法,JVM非运行的场合),他进程(装逼说法,其他机器JVM,不同的JVM) Parcelable和Serializable 初衷: P ...
- PhoneGap移动开发框架
phonegap是一个跨平台的移动app开发框架,可以把html css js写的页面打包成跨平台的可以安装的移动app,并且可以调用原生的几乎所有的功能,比如摄像头,联系人,加速度等 看到一篇 ...
- MVC上传相关
1.上传大小设置 system.web节点,httpruntime节点加入maxRequestLength="4096",以K为单位,例子中大小限制为4M. 2.form提交htm ...