Android(安卓)ListView 列表视图

Android ListView (列表视图)是一个将多个项分组并在垂直可滚动列表中显示的视图。使用从源(如数组或数据库)提取内容的适配器(adapter)将列表项自动插入到列表中。

适配器实际上是 UI 组件和将数据填充到 UI 组件中的数据源之间的桥梁。适配器保存数据并将数据发送到适配器视图,视图可以从适配器视图获取数据,并在不同视图(如 SpinnerListViewGridView 等)上显示数据。

ListViewGridViewAdapterView 的子类,可以通过将它们绑定到适配器(Adapter)来填充它们,适配器从外部源检索数据并创建表示每个数据项的视图。

Android 提供了 Adapter 的几个子类,这些子类对于检索不同类型的数据和为 AdapterView(即 ListViewGridView)构建视图非常有用。常见的适配器有 ArrayAdapterBaseAdapterCursorAdapterSimpleCursor 适配器, SpinnerAdapter 以及 WrapperListAdapter。我们将看到两个适配器的单独实例。


ListView 属性

以下是 ListView 特有的重要属性:

编号属性 & 描述
1

android:id

这是唯一标识布局的 ID。

2

android:divider

这是可绘制的或可在列表项之间绘制的颜色。

3

android:dividerHeight

这指定分隔线的高度可以是 px、dp、sp、in 或 mm。

4

android:entries

指定对将填充 ListView 的数组资源的引用。

5

android:footerDividersEnabled

当设置为 false 时,ListView 将不会在每个页脚视图之前绘制分隔线。默认值为 true

6

android:headerDividersEnabled

当设置为 false 时,ListView 将不会在每个标题视图之后绘制分隔符。默认值为 true


ArrayAdapter(数组适配器)

当数据源是数组时,可以使用此适配器。默认情况下,ArrayAdapter 通过对每个数组项调用 toString() 并将内容放置在 TextView 中,为每个数组项创建一个视图。假设您有一个字符串数组要在 ListView 中显示,请使用构造函数初始化一个新的 ArrayAdapter,以指定每个字符串和字符串数组的布局:

  1. ArrayAdapter adapter = new ArrayAdapter<String>(this,R.layout.ListView,StringArray);

以下是此构造函数的参数:

  • 第一个参数是应用程序上下文。大多数情况下,保持这样。

  • 第二个参数是在XML文件中定义的布局,并且数组中的每个字符串都有 TextView

  • 最后一个参数是将在文本视图中填充的字符串数组。

创建数组适配器后,只需在 ListView 对象上调用 setAdapter(),如下所示:

  1. ListView listView = (ListView) findViewById(R.id.listview);
  2. listView.setAdapter(adapter);

您将在 XML 文件中的 res/layout 目录下定义列表视图。对于我们的实例,我们将使用 activity_main.xml 文件。

实例

这个例子将带你通过简单的步骤来展示如何使用 TableLayout 创建你自己的 Android 应用程序。按照以下步骤修改我们在 Hello World 实例 章节中创建的 Android 应用程序:

步骤描述
1您将使用 Android Studio IDE 创建一个 Android 应用程序,并将其命名为 com.example.ListDisplay 包下的 ListDisplay,如 Hello World 实例一章所述。
2修改文件 res/layout/activity_main.xml 的内容来包含 ListView 内容,并使用它的一些属性。
3无需更改 string.xml 文件中的默认字符串常量。Android studio 负责默认字符串常量。
4创建文本视图文件 res/layout/activity_listview.xml 此文件将具有显示所有列表项的设置因此,您可以自定义其字体、填充、颜色等使用此文件。
5运行应用程序以启动 Android 模拟器并验证应用程序中所做更改的结果。

下面是修改后的主 activity 文件 src/com.example.ListDisplay/ListDisplay.java 的内容。该文件可以包括每个基本生命周期方法。

  1. package com.example.ListDisplay;
  2. import android.os.Bundle;
  3. import android.app.Activity;
  4. import android.view.Menu;
  5. import android.widget.ArrayAdapter;
  6. import android.widget.ListView;
  7. public class ListDisplay extends Activity {
  8. // Array of strings...
  9. String[] mobileArray = {"Android","IPhone","WindowsMobile","Blackberry",
  10. "WebOS","Ubuntu","Windows7","Max OS X"};
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. ArrayAdapter adapter = new ArrayAdapter<String>(this,
  16. R.layout.activity_listview, mobileArray);
  17. ListView listView = (ListView) findViewById(R.id.mobile_list);
  18. listView.setAdapter(adapter);
  19. }
  20. }

下面是 res/layout/activity_main.xml 文件的内容:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. tools:context=".ListActivity" >
  7. <ListView
  8. android:id="@+id/mobile_list"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content" >
  11. </ListView>
  12. </LinearLayout>

下面是 res/values/strings.xml 文件的内容,定义了两个常量:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string name="app_name">ListDisplay</string>
  4. <string name="action_settings">Settings</string>
  5. </resources>

下面是 res/layout/activity_listview.xml 文件的内容:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- Single List Item Design -->
  3. <TextView xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:id="@+id/label"
  5. android:layout_width="fill_parent"
  6. android:layout_height="fill_parent"
  7. android:padding="10dip"
  8. android:textSize="16dip"
  9. android:textStyle="bold" >
  10. </TextView>

让我们尝试运行我们修改过的 Hello World!我们刚刚修改的应用程序。我假设您在进行环境设置时创建了 AVD。要从 Android Studio 运行应用程序,请打开项目的 activity 文件之一,然后单击工具栏上的运行 Eclipse Eclipse Run Icon 图标。Android studio 在您的AVD 上安装应用程序并启动它,如果您的设置和应用程序一切正常,它将显示以下模拟器窗口:


SimpleCursorAdapter(简单游标适配器)

当数据源是数据库 Cursor(游标)时,可以使用此适配器。使用 SimpleCursorAdapter 时,必须指定用于光标中的每一行的布局,以及光标中的哪些列应插入到布局的哪些视图中。

例如,如果要创建人名和电话号码列表,可以执行一个查询,该查询返回一个游标,其中包含每个人的一行以及姓名和号码的列。然后创建一个字符串数组,指定要在每个结果的布局中使用光标中的哪些列,并创建一个整数数组,指定应放置每个列的相应视图:

  1. String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME,
  2. ContactsContract.CommonDataKinds.Phone.NUMBER};
  3. int[] toViews = {R.id.display_name, R.id.phone_number};

实例化 SimpleCursorAdapter 时,传递用于每个结果的布局、包含结果的 Cursor 以及这两个数组:

  1. SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
  2. R.layout.person_name_and_number, cursor, fromColumns, toViews, 0);
  3. ListView listView = getListView();
  4. listView.setAdapter(adapter);

然后,SimpleCursorAdapter 使用提供的布局为 Cursor 中的每一行创建一个视图,方法是将每一列的项插入到相应的视图中。

分类导航