今天给大家带来《android应用开发全程实录》中关于listview和adatper中的部分。包括listview的基本使用,listview的优化等。

我们经常会在应用程序中使用列表的形式来展现一些内容,所以学好ListView是非常必需的。ListView也是Android中比较难以使用的控件,这节内容就将详细解读ListView的用法。

一个ListView通常有两个职责。

(1)将数据填充到布局。

(2)处理用户的选择点击等操作。

第一点很好理解,ListView就是实现这个功能的。第二点也不难做到,在后面的学习中读者会发现,这非常简单。

一个ListView的创建需要3个元素。

(1)ListView中的每一列的View。

(2)填入View的数据或者图片等。

(3)连接数据与ListView的适配器。

也就是说,要使用ListView,首先要了解什么是适配器。适配器是一个连接数据和AdapterView(ListView就是一个典型的AdapterView,后面还会学习其他的)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便

Android中提供了很多的Adapter,表4-5列出了常用的几个。

表4-5 常用适配器

Adapter

含义

ArrayAdapter<T>

用来绑定一个数组,支持泛型操作

SimpleAdapter

用来绑定在xml中定义的控件对应的数据

SimpleCursorAdapter

用来绑定游标得到的数据

BaseAdapter

通用的基础适配器

其实适配器还有很多,要注意的是,各种Adapter只不过是转换的方式和能力不一样而已。下面就通过使用不同的Adapter来为ListView绑定数据(SimpleCursorAdapter暂且不讲,后面讲SQLite时会介绍)。

4.12.1 ListView使用ArrayAdapter

用ArrayAdapter可以实现简单的ListView的数据绑定。默认情况下,ArrayAdapter绑定每个对象的toString值到layout中预先定义的TextView控件上。ArrayAdapter的使用非常简单。

实例:

工程目录:EX_04_12

在布局文件中加入一个ListView控件。

  1. <?xmlversionxmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:androidLinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. >
  6. <!-- 添加一个ListView控件 -->
  7. <ListView
  8. android:id="@+id/lv"
  9. android:layout_width="fill_parent"
  10. android:layout_height="fill_parent"
  11. />
  12. </LinearLayout>

然后在Activity中初始化。

  1. publicclass MyListView extends Activity {
  2. privatestaticfinal String[] strs = new String[] {
  3. "first", "second", "third", "fourth", "fifth"
  4. };//定义一个String数组用来显示ListView的内容
  5. private ListView lv;
  6. /** Called when the activity is first created. */
  7. @Override
  8. publicvoid onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.main);
  11. lv = (ListView) findViewById(R.id.lv);//得到ListView对象的引用
  12. /*为ListView设置Adapter来绑定数据*/
  13. lv.setAdapter(new ArrayAdapter<String>(this,
  14. android.R.layout.simple_list_item_1, strs));
  15. }
  16. }

▲图4-29 ListView使用ArrayAdapter运行效果

代码非常的简单,运行效果如图4-29所示。

分析一下使用的步骤。

(1)定义一个数组来存放ListView中item的内容。

(2)通过实现ArrayAdapter的构造函数来创建一个ArrayAdapter的对象。

(3)通过ListView的setAdapter()方法绑定ArrayAdapter。

其中第二步有必要说一下的是,ArrayAdapter有多个构造函数,例子中实现的是最常用的一种。第一个参数为上下文,第二个参数为一个包含TextView,用来填充ListView的每一行的布局资源ID。第三个参数为ListView的内容。其中第二个参数可以自定义一个layout,但是这个layout必须要有TextView控件。通常我们使用Android提供的资源,除了例子中所用的,常用的还有如下几种,可实现带RadioButton和CheckBox的ListView。

(1)通过指定android.R.layout.simple_list_item_checked这个资源,实现带选择框的ListView。需要用setChoiceMode()方法设定选择为多选还是单选,否则将不能实现选择效果,运行效果如图4-30所示。

实现代码如下:

  1. lv.setAdapter(new ArrayAdapter<String>(this,
  2. android.R.layout.simple_list_item_checked, strs));
  3. lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

(2)通过指定android.R.layout.simple_list_item_multiple_choice这个资源实现带CheckBox的ListView。同样的,需要用setChoiceMode()方法来设置单选或者多选,运行效果如图4-31所示。

实现代码如下:

(3)通过指定android.R.layout.simple_list_item_single_choice这个资源实现带RadioButton的ListView。这里要注意的是,这里并不是指定了单选。是多选还是单选要通过setChoiceMode()方法来指定,运行效果如图4-32所示。

实现代码如下:

▲图4-30 带选择框的ListView

▲图4-31 带CheckBox的ListView

▲图4-32 带RadioButton的ListView

在前面讲到过,ListView的职责除了填充数据外,还要处理用户的操作。通过如下的代码就可以为ListView绑定一个点击监听器,点击后在标题栏显示点击的行数。

  1. lv.setOnItemClickListener(new OnItemClickListener() {
  2. @Override
  3. publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
  4. long arg3) {
  5. //点击后在标题上显示点击了第几行
  6. setTitle("你点击了第"+arg2+"行");
  7. }
  8. });

4.12.2 ListView使用SimpleAdapter

很多时候需要在列表中展示一些除了文字以外的东西,比如图片等。这时候可以使用SimpleAdapter。SimpleAdapter的使用也非常简单,同时它的功能也非常强大。可以通过它自定义ListView中的item的内容,比如图片、多选框等。看一个例子,实现一个每一行都有一个ImageView和TextView的ListView。先看一下运行效果,如图4-34所示。

▲图4-34 带图标的ListView

首先在布局文件中增加一个ListView控件。

还需要定义一个ListView中每一行的布局,用RelativeLayout来实现一个带两行字和一个图片的布局。

item.xml:

  1. <?xmlversionxmlversion="1.0"encoding="utf-8"?>
  2. <RelativeLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_height="fill_parent"
  5. android:layout_width="fill_parent">
  6. <ImageView
  7. android:layout_alignParentRight="true"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:id="@+id/ItemImage"
  11. />
  12. <TextView
  13. android:id="@+id/ItemTitle"
  14. android:layout_height="wrap_content"
  15. android:layout_width="fill_parent"
  16. android:textSize="20sp"
  17. />
  18. <TextView
  19. android:id="@+id/ItemText"
  20. android:layout_height="wrap_content"
  21. android:layout_width="fill_parent"
  22. android:layout_below="@+id/ItemTitle"
  23. />
  24. </RelativeLayout>

配置完毕,就可以在Java代码中为ListView绑定数据。

  1. publicclass MyListViewSimple extends Activity {
  2. private ListView lv;
  3. /** Called when the activity is first created. */
  4. @Override
  5. publicvoid onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.main);
  8. lv = (ListView) findViewById(R.id.lv);
  9. /*定义一个动态数组*/
  10. ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String,     Object>>();
  11. /*在数组中存放数据*/
  12. for(int i=0;i<10;i++)
  13. {
  14. HashMap<String, Object> map = new HashMap<String, Object>();
  15. map.put("ItemImage", R.drawable.icon);//加入图片
  16. map.put("ItemTitle", "第"+i+"行");
  17. map.put("ItemText", "这是第"+i+"行");
  18. listItem.add(map);
  19. }
  20. SimpleAdapter mSimpleAdapter = new SimpleAdapter(this,listItem,//需要绑定的数据
  21. R.layout.item,//每一行的布局
  22. //动态数组中的数据源的键对应到定义布局的View中
  23. new String[] {"ItemImage","ItemTitle", "ItemText"},
  24. newint[] {R.id.ItemImage,R.id.ItemTitle,R.id.ItemText}
  25. );
  26. lv.setAdapter(mSimpleAdapter);//为ListView绑定适配器
  27. lv.setOnItemClickListener(new OnItemClickListener() {
  28. @Override
  29. publicvoid onItemClick(AdapterView<?> arg0, View arg1, int arg2,
  30. long arg3) {
  31. setTitle("你点击了第"+arg2+"行");//设置标题栏显示点击的行
  32. }
  33. });
  34. }
  35. }

使用simpleAdapter的数据一般都是用HashMap构成的列表,列表的每一节对应ListView的每一行。通过SimpleAdapter的构造函数,将HashMap的每个键的数据映射到布局文件中对应控件上。这个布局文件一般根据自己的需要来自己定义。梳理一下使用SimpleAdapter的步骤。

(1)根据需要定义ListView每行所实现的布局。

(2)定义一个HashMap构成的列表,将数据以键值对的方式存放在里面。

(3)构造SimpleAdapter对象。

(4)将LsitView绑定到SimpleAdapter上。

(51cto的编辑器竟然不支持这个长度的文章,下部分见下篇博文)

转载于:https://www.cnblogs.com/liyingming/archive/2013/03/19/2970054.html

安卓listview控件使用相关推荐

  1. 安卓APP_ 控件(10)—— ListView可上下滑动的列表(重要)与ViewHolder优化

    摘自:安卓APP_ 控件(10)-- ListView可上下滑动的列表(重要)与ViewHolder优化 作者:丶PURSUING 发布时间: 2021-04-12 23:28:27 网址:https ...

  2. 安卓常用控件--列表视图

    安卓常用控件--列表视图 (一)列表视图概述 1.继承关系图 2.列表视图API文档 3. 列表视图四要素 4.四种适配器 (二)数组适配器 1.数组适配器API文档 2.数组适配器继承关系 3.数组 ...

  3. ListView控件的理解——自洽理论

    写在前面的话: *标题中已经说明,是自洽理论.因此,有几率会有理解错误.但是,你不可以因此骂我. -我这个人经不起别人的批评,如果你批评我,我就,我就.... ## <第一行代码>读书笔记 ...

  4. Android使用ListView控件问题

    Android使用ListView控件问题: The application has stopped unexpectedly, please try again. 开发环境:android 1.6 ...

  5. ASP.NET ListView控件基本操作

    1.前台代码 View Code 1 <asp:ListView ID="lvDepartment" runat="server" DataKeyName ...

  6. 【转】 ASP.NET 3.5中使用新的ListView控件

    ASP.NET中新的ListView控件为显示和CURD数据库操作提供了基于模板的布局,使之成为一项极好的方式,建立以数据为中心的Web应用程序. 当你编写以用户为中心的应用程序时,总需要某种形式的数 ...

  7. C# ListView控件显示表格(自适应宽度),添加 Checkbox,删除选择项,选中颜色和鼠标滑过背景变色

    本文转载自:http://www.liangshunet.com/ca/201309/586362553.htm 亮术网 2020-03-07 本网原创 DataGridView控件功能十分强大,显示 ...

  8. ListView控件的基本使用(方式一:使用ArrayAdapter适配器实现)

    ListView绝对可以称得上是Android中最常用的控件之一,几乎所有的应用程序都会用到它.由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候 ...

  9. ListView控件学习系列2-编辑ListView(Edit,Update,Insert,Delete)

    目录: ListView控件学习系列1-了解ListView控件 ListView控件学习系列2-编辑ListView ListView控件学习系列3-ListView选择,排序,分页 ListVie ...

  10. VB.net实现从ListView控件中异地获取文本内容源代码

    对于一些VB6工程代码来说,需要完成从VB到VB.net的转换,在转换过程中需要注意很多内容,利用VB.net的直接转换功能很少能完全成功,需要我们付出很大的努力. 下面的VB.net代码实现从其他应 ...

最新文章

  1. 【GOF】23中设计模式深析
  2. 局部加权线性回归(Local Weighted Linear Regression)+局部加权回归+局部线性回归
  3. 浅拷贝和深拷贝的区别_深拷贝和浅拷贝的区别
  4. 学习python有哪些优势
  5. “我们的边缘计算技术点,可能超前了业界一点”
  6. 苹果电脑拷贝文件到u盘很慢_给自己挑个好U盘,再也不想天天找同事借了
  7. 诺基亚确认将推出平板电脑 拟配置MeeGo系统
  8. 2022-2028年全球与中国SCADA石油和天然气行业发展趋势及投资战略分析
  9. 基于切比雪夫逼近法的滤波器的matlab设计与实现
  10. 使用vs2015打开以前版本的.sln工程不兼容的问题
  11. scada java_SCADA开源项目lite版本
  12. 关于邮件服务器的dns解析及mx记录问题!
  13. 企微创建自建应用-关联html/小程序
  14. 跨境电商亚马逊之ERP系统开发的初衷产生的意义
  15. MyBatis Plus实现动态字段排序
  16. OBIEE分析开发-使用Echarts展现地图1
  17. 我是怎么走出迷茫,找到自己热爱的事业的。
  18. 魅族 系统更新服务器,Flyme系统再次更新,魅族16系列基本在内,你尝鲜了吗?...
  19. 利用Histcite+Web Of Science帮助领域文献了解
  20. js验证电子邮箱,js验证email合法性,javascript验证电子信箱

热门文章

  1. MySQL incompatible with sql_mode=only_full_group_by 问题解决
  2. python表格模板_python 网站 使用表单和模板
  3. 微服务发展的历史_三位一体的中台、微服务和云原生,揭示了软件架构的最新发展趋势...
  4. Hibernate的双向1-N关联(五)
  5. caffe之 Blob、Layer、Net
  6. 计算机网络基础系列(三)网络应用
  7. 推荐系统笔记三、基于近邻的推荐系统进阶篇
  8. C# winForm utf8 gbk 相互转码小工具
  9. 浅谈JavaScript--闭包
  10. (转)java中使用memcache