原文:Android零基础入门第37节:初识ListView

之前我们学习的一些UI组件都比较简单,但是在实际开发中,会经常遇见列表界面设计,如通讯录、电话列表、信息列表等。那么从本节开始来详细学习列表界面设计。

一、了解ListView

在Android开发中,ListView是比较常用的控件,它以列表的形式显示具体内容,并且能够根据数据的长度自适应显示。在学习ListView之前,先来一起了解AdapterView。

AdapterView是一组重要的组件,AdapterView本身是一个抽象基类,它派生的子类在用法上十分相似,只是显示界面有一定的区别,因此把它们归为一类,针对它们的共性集中讲解,并突出介绍它们的区别。AdapterView主要具有以下几个特征。

  • AdapterView继承了 ViewGroup,它的本质是容器。

  • AdapterView可以包括多个“列表项”,并将多个“列表项”以合适的形式显示出来。

  • AdapterView显示的多个“列表项”由Adapter提供。调用AdapterView的 setAdapter(Adapter)方法设置 Adapter 即可。

AdapterView及其子类的关系如下图所示。

从上图可以看出,AdapterView派生了三个子类:AbsListView、AbsSpinner 和 AdapterView Animator,这三个子类依然是抽象的,实际使用时往往采用它们的子类。其中AbsListView提供的常用XML属性及相关方法如下表所示。

先从比较简单的子类ListView的使用方法开始学习,使用ListView主要有以下两种方式。

  • 直接使用ListView进行创建。

  • 让 Activity 继承 ListActivity (相当于该 Activity 显示的组件为 ListView,后续再进行学习)。

一旦在程序中获得了 ListView之后,接下来就需要为ListView设置它要显示的列表项了。 在这一点上,ListView显示出AdapterView的特征:通过setAdapter(Adapter)方法为之提供 Adapter,并由Adapter提供列表项即可,关于Adapter的使用会在后续进行学习,欢迎关注分享达人秀(ShareExpert)获取最新教程,也欢迎加入Android入门技术讨论微信群,可先添加好友(jinwenyu2010)备注Android群,然后拽进群。

ListView提供的常用XML属性如下所示:

  • android:divider:设置 List 列表项的分隔条(即可用颜色分隔,也可用 Drawable 分隔)。

  • android:dividerHeight:设置分隔条的高度。

  • android:entries:指定一个数组资源,Android 将根据该数组资源来生成 ListView。

  • android:footerDividerEnabled:如果设置为 false,则不在 footer View 之前绘制分隔条。

  • android:footerDividerEnabled:如果设置为 false,则不在 header View 之后绘制分隔条。

二、ListView简单示例

接下来通过一个简单的示例程序来学习ListView的常见用法。

我们在之前一直使用的WidgetSample工程默认app模块,为了更方便代码管理,本期开始的列表组件的学习专门新建一个Module来完成。

新建Module主要有两种方式,选中WidgetSample工程,依次选择菜单栏File -> New -> New Module,或者选中WidgetSample工程后右键依次选择New -> Module,如下图所示:

然后会弹出如下Module新建页面:

选择默认的“Phone & Tablet Module”,点击“Next”进入下一步。

输入工程名称和Module名称,一般输入工程名称后Module名和包名也会跟随改变,根据自己的需要选择是否需要调整,然后点击“Next”进入下一步。

这个页面是不是比较熟悉了,没错,就是之前创建WidgetSample工程相同的操作。这里选择默认的空白Activity,然后点击“Next”进入下一步。

同样的,Activity和layout命名页面也是非常熟悉的,仍然使用默认的命名,点击“Finish”完成创建。于是可以看到在WidgetSample工程下新增了一个与app并列的listviewsample的Module,如下图所示:

关于Module的作用不是很理解的,这里不再重复讲解了,建议回头再去看一遍之前的内容:掌握Android Studio项目结构

可以发现新建的listviewsample与app的目录结构完全相同,再操作上也是相同的,后期不做过多说明,如果仍有问题建议添加小编好友(jinwenyu2010)拽入Android入门技术分享微信群探讨。

在app/main/res/layout/目录下找到activity_main.xml文件,在其中填充如下代码片段:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <!-- 直接使用数组资源给出列表项 -->
<!-- 设置使用蓝色的分隔条 -->
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/countries"
android:divider="#00f"
android:dividerHeight="2px"
android:headerDividersEnabled="false"/>
</LinearLayout>

上面的界面布局文件中定义了一个ListView,并通过android:entries指定了列表项数组, 该ListView还通过android:divider改变了列表项之间的分隔条。

上面这个ListView指定了 android:entries=&apos;&apos;@array/countries",该属性值用到了数组资源,因此还需要在应用中定义一个名为countries的数组。

在应用程序的res/values/目录下创建一个arrays.xml文件,在其中定义countries数组。arrays.xml的代码如下:

运行程序(注意鼠标的焦点应该在listviewsample这一Module下,在工具栏的Module栏会显示listviewsample),可以看到如下图所示列表效果。

从上述示例程序发现,使用数组创建ListView非常简单,但这种ListView 能定制的内容很少,甚至连每个列表项的字号大小、颜色都不能改变。 如果想对ListView的外观、行为进行定制,就需要把ListView作为AdapterView使用,通过Adapter控制每个列表项的外观和行为。

由于这一块的内容较多,后续几期内容再接着继续分享。

今天就先到这里,如果有问题欢迎留言一起探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!

此文章版权为微信公众号分享达人秀(ShareExpert)——鑫鱻所有,若需转载请联系作者授权,特此声明!

往期总结分享:

Android零基础入门第1节:Android的前世今生

Android零基础入门第2节:Android 系统架构和应用组件那些事

Android零基础入门第3节:带你一起来聊一聊Android开发环境

Android零基础入门第4节:正确安装和配置JDK, 高富帅养成第一招

Android零基础入门第5节:善用ADT Bundle, 轻松邂逅女神

Android零基础入门第6节:配置优化SDK Manager, 正式约会女神

Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅

Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点

Android零基础入门第9节:Android应用实战,不懂代码也可以开发

Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio

Android零基础入门第11节:简单几步带你飞,运行Android Studio工程

Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌

Android零基础入门第13节:Android Studio配置优化,打造开发利器

Android零基础入门第14节:使用高速Genymotion,跨入火箭时代

Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航

Android零基础入门第16节:Android用户界面开发概述

Android零基础入门第17节:TextView属性和方法大全

Android零基础入门第18节:EditText的属性和使用方法

Android零基础入门第19节:Button使用详解

Android零基础入门第20节:CheckBox和RadioButton使用大全

Android零基础入门第21节:ToggleButton和Switch使用大全

Android零基础入门第22节:ImageView的属性和方法大全

Android零基础入门第23节:ImageButton和ZoomButton使用大全

Android零基础入门第24节:自定义View简单使用,打造属于你的控件

Android零基础入门第25节:简单且最常用的LinearLayout线性布局

Android零基础入门第26节:两种对齐方式,layout_gravity和gravity大不同

Android零基础入门第27节:正确使用padding和margin

Android零基础入门第28节:轻松掌握RelativeLayout相对布局

Android零基础入门第29节:善用TableLayout表格布局

Android零基础入门第30节:两分钟掌握FrameLayout帧布局

Android零基础入门第31节:少用的AbsoluteLayout绝对布局

Android零基础入门第32节:新推出的GridLayout网格布局

Android零基础入门第33节:Android事件处理概述

Android零基础入门第34节:Android中基于监听的事件处理

Android零基础入门第35节:Android中基于回调的事件处理

Android零基础入门第36节:Android系统事件的处理

Android零基础入门第37节:初识ListView的更多相关文章

  1. Android零基础入门第44节:ListView数据动态更新

    原文:Android零基础入门第44节:ListView数据动态更新 经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据都是 ...

  2. Android零基础入门第43节:ListView优化和列表首尾使用

    原文:Android零基础入门第43节:ListView优化和列表首尾使用 前面连续几期都在学习ListView的各种使用方法,如果细心的同学可能会发现其运行效率是有待提高的,那么本期就来一起学习有哪 ...

  3. Android零基础入门第38节:初识Adapter

    原文:Android零基础入门第38节:初识Adapter 在上一节一起了解了ListView的简单使用,那么本节继续来学习与ListView有着千丝万缕的Adapter. 一.了解MVC模式 在开始 ...

  4. Android零基础入门第58节:数值选择器NumberPicker

    原文:Android零基础入门第58节:数值选择器NumberPicker 上一期学习了日期选择器DatePicker和时间选择器TimePicker,是不是感觉非常简单,本期继续来学习数值选择器Nu ...

  5. Android零基础入门第59节:AnalogClock、DigitalClock和TextClock时钟组件

    原文:Android零基础入门第59节:AnalogClock.DigitalClock和TextClock时钟组件 在前面一期,我们学习了DatePicker和TimePicker,在实际开发中其不 ...

  6. Android零基础入门第57节:日期选择器DatePicker和时间选择器TimePicker

    原文:Android零基础入门第57节:日期选择器DatePicker和时间选择器TimePicker 在实际开发中,经常会遇见一些时间选择器.日期选择器.数字选择器等需求,那么从本期开始来学习And ...

  7. Android零基础入门第56节:翻转视图ViewFlipper打造引导页和轮播图

    原文:Android零基础入门第56节:翻转视图ViewFlipper打造引导页和轮播图 前面两期学习了 ViewAnimator及其子类ViewSwitcher的使用,以及ViewSwitcher的 ...

  8. Android零基础入门第55节:ImageSwitcher和TextSwitcher使用

    原文:Android零基础入门第55节:ImageSwitcher和TextSwitcher使用 上一期我们了解了ViewAnimator组件和ViewSwitcher组件的使用,你都掌握了吗?本期一 ...

  9. Android零基础入门第54节:视图切换组件ViewSwitcher

    原文:Android零基础入门第54节:视图切换组件ViewSwitcher 前面三期学习了ProgressBar系列组件,那本期开始一起来学习ViewAnimator组件. 一.ViewAnimat ...

随机推荐

  1. 2015年工作中遇到的问题:81-90,标题党-Nginx与真实IP-Mybatis等

     81."标题党"与"百度收录"问题. 很久以来,就发现那些"标题党"的收录和排名情况非常好,比如CSDN某篇文章,就随便一写,就排在了第一 ...

  2. sql中group by用来干嘛的

    sql中group by用来干嘛的 一.总结 一句话总结: 1.group by用来分类汇总的,by后面接要分的类 2.group by既然是分类汇总,那就要和聚合函数结合使用,因为要汇总啊 3.ha ...

  3. JSP和Servlet学习笔记1 - 访问配置

    1. 访问 WebContent 目录下的 JSP 文件 在 WebContent 目录下的文件可以直接在浏览器中访问.新建一个 test.jsp 文件 <%@ page language=&q ...

  4. Bit error testing and training in double data rate (ddr) memory system

    DDR PHY interface bit error testing and training is provided for Double Data Rate memory systems. An ...

  5. 2013级别C++文章9周(春天的)工程——运算符重载(两)

    课程主页中:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读程序"简单C++学生 ...

  6. ListView与GridView优化

    前言 ListView是Android中最常用的控件,通过适配器来进行数据适配然后显示出来,而其性能是个很值得研究的话题.本文与你一起探讨Google I/O提供的优化Adapter方案,欢迎大家交流 ...

  7. LeetCode总结 -- 树结构的一部分

    这篇总结主要介绍树中比較常见的一类题型--树的构造.事实上本质还是用递归的手法来实现,可是这类题目有一个特点.就是它是构建一棵树.而不是给定一棵树,然后进行遍历,所以实现起来思路上有点逆向,还是要练习 ...

  8. 贝叶斯方法(Bayesian approach) —— 一种概率解释(probabilistic interpretation)

    1. Bayesian approach 对于多项式拟合问题,我们可通过最小二乘(least squares)的方式计算得到模型的参数,最小二乘法又可视为最大似然(maximum likelihood ...

  9. 主干(trunk)、分支(branch )、标记(tag)

    主干(trunk).分支(branch ).标记(tag) 用法示例 + 图解   以svn为例,git的master相当于trunk,dev分支相当于branches --------------- ...

  10. C#或者WPF中让某个窗体置顶

    原文:C#或者WPF中让某个窗体置顶 前记:在工作中有个需求,要求不管到那个界面,我必须让一个浮动条(其实是个窗体)置顶. 我用wpf,因为有之前有好几个界面已经设置成topmost了,所以在这几个界 ...