• Android Video Tutorials

Android 列表视图



Android ListView 是一种将多个项目分组并在垂直可滚动列表中显示它们的视图。列表项使用适配器 (Adapter) 自动插入列表中,该适配器从数组或数据库等源获取内容。

List View

列表视图

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

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

Android 提供了几个 Adapter 的子类,这些子类对于检索不同类型的数据和为 AdapterView(即 ListView 或 GridView)构建视图非常有用。常见的适配器包括 ArrayAdapterBaseAdapterCursorAdapterSimpleCursorAdapterSpinnerAdapterWrapperListAdapter。我们将分别查看这两个适配器的示例。

ListView 属性

以下是 GridView 的重要属性:

序号 属性和描述
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 来指定每个字符串的布局和字符串数组:

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

此构造函数的参数如下:

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

  • 第二个参数是在 XML 文件中定义的布局,其中包含数组中每个字符串的TextView

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

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

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

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

示例

下面的示例将引导您完成简单的步骤,说明如何使用 ListView 创建您自己的 Android 应用程序。请按照以下步骤修改我们在Hello World 示例章节中创建的 Android 应用程序:

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

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

package com.example.ListDisplay;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListDisplay extends Activity {
   // Array of strings...
   String[] mobileArray = {"Android","IPhone","WindowsMobile","Blackberry",
      "WebOS","Ubuntu","Windows7","Max OS X"};
   
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      ArrayAdapter adapter = new ArrayAdapter<String>(this, 
         R.layout.activity_listview, mobileArray);
      
      ListView listView = (ListView) findViewById(R.id.mobile_list);
      listView.setAdapter(adapter);
   }
}

以下是res/layout/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=".ListActivity" >

   <ListView
      android:id="@+id/mobile_list"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" >
   </ListView>
 
</LinearLayout>

以下是res/values/strings.xml文件的内容,用于定义两个新的常量:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">ListDisplay</string>
   <string name="action_settings">Settings</string>
</resources>

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

<?xml version="1.0" encoding="utf-8"?>
<!--  Single List Item Design -->

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/label"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:padding="10dip"
   android:textSize="16dip"
   android:textStyle="bold" >
</TextView>

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

List View

SimpleCursorAdapter

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

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

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

当您实例化 SimpleCursorAdapter 时,请传递要用于每个结果的布局、包含结果的游标以及这两个数组:

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

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

android_user_interface_layouts.htm
广告