ListView是手机系统中非常常用的一个组件,以垂直列表的形式显示所有列表项,今天我们来探索一下吧。
首先我们来了解一下ListView的基本属性吧。
XML属性
andorid:divider:设置List列表项的分隔条(既可用颜色分隔,也可用Drawable分隔)
android:dividerHeight:设置分隔条的高度
android:entries:设置一个数组资源,Android将根据该数组资源来生成ListView
android:footerDividersEnabled:如果设置为false,则不在footer View之前绘制分隔条
android:headerDividersEnabled:如果设置为false,则不在headerView之后绘制分隔条
接下来通过一个非常简单的案例来体验一下(使用Android Studio):
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/hero"
android:divider="#ff93ff87"
android:dividerHeight="2px"
android:headerDividersEnabled="false">
</ListView>
</LinearLayout>
这里在values文件夹下加了一个arrays.xml文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="books">
<item>乔布斯</item>
<item>拉里.佩奇</item>
<item>谢尔盖</item>
<item>扎克伯格</item>
</string-array>
</resources>
真机上效果如下:
然而用数组的方式还不是太简单了呢?给人的感觉不够酷。如果想要对ListView的外观、行为进行定制,就需要把ListView作为AdapterView使用,通过Adapter控制每个列表项的外观和行为。现在你会问:什么是AdapterView了吧?
AdapterView的本质是容器,继承了ViewGroup。如上例,AdapterView可以包括多个列表项,更重要的是,可将多个列表项以合适的形式来现实,合适的形式就是我们要的炫酷的效果。而AdapterView显示的多个列表项由Adapter提供,调用AdapterView中的setAdapter(Adapter)方法即可。
那Adapter又是个什么东西呢?
Adapter本身是一个接口,派生了ListAdapter和SpinnerAdapter两个子接口。而非常常见的BaseAdapter实现了ListAdapter和SpinnerAdapter两个接口。我们常用的ArrayAdapter和SimpleAdapter都实现了BaseAdapter的接口。现在我们介绍一下ArrayAdapter常用的实现类吧。
ArrayAdapter:简单、易用,通常用于将List集合的多个值包装成多个列表项。
SimpleAdapter:并不简单、功能强大的Adapter,可用于将List集合的多个对象包装成多个列表项。
SimpleCursorAdapter:与SimpleAdapter基本相似,只是用于包装Cursor提供的数据。
BaseAdapter:通常用于被扩展,扩展BaseAdapter可以对各列表项进行最大限度的定制。
是不是有点晕了呢?接下来我们通过一个实例来理解。
activity_main.xml
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity">
<ListView