位置:首页 > 手机开发 > Android开发在线教程 > Android ListView

Android ListView

Android ListView是一个组几个项目,并显示在垂直滚动列表。列表项会使用适配器自动插入到列表中,内容,如数组或数据库。

一个适配器实际上UI组件和数据源之间的桥梁,填充数据到UI组件。适配器可以用来提供数据如:spinner,列表视图,网格视图等。

ListView和GridView 是 AdapterView 的子类,它们可以填充绑定到一个适配器,它从外部源检索数据,并创建一个视图表示每个数据项。

Android提供了几个子适配器用于检索不同类型的数据,建立一个 AdapterView(即 ListView 或 GridView )视图是有用的。最常见的两种适配器是 ArrayAdapter 和 SimpleCursorAdapter。我们将看看两个适配器各自的例子。

ListView属性

以下是具体的GridView中的重要属性:

属性 描述
android:id 这是唯一标识的布局的ID。
android:divider 这是可拉伸或颜色列表项的绘制。
android:dividerHeight 这指定分频器的高度。这可能是px, dp, sp, in 或 mm。
android:entries 指定引用数组的资源,将用于填充ListView。
android:footerDividersEnabled 当设置为false,在ListView将不绘制每个页脚视图之前的分隔。默认值是true。
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);

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

示例

下面的例子将通过简单的步骤显示如何使用ListView,创建自己的Android应用程序。按照下面的步骤来创建一个Android应用程序项目:ListView 

Step 描述
1 使用Eclipse IDE创建Android应用程序,在包com.yiibai.helloworld下创建一个命名为 ListView 的项目
2 修改res/layout/activity_main.xml文件的默认内容以包括ListView的内容及属性
3 在res/values/strings.xml文件中定义所需的常量
4 创建一个文本文件res/layout/activity_listview.xml。该文件将设置显示所有的列表项。所以可以使用此文件自定义其字体,填充,颜色等。
6 运行该应用程序启动Android模拟器并验证应用程序所运行的结果。

以下是主活动文件 src/com.yiibai.listview/MainActivity.java 的内容。这个文件可以包括每个的基本生命周期方法。

package com.yiibai.listview;

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

public class MainActivity extends Activity {

   // Array of strings...
    String[] countryArray = {"China", "India", "Pakistan", "USA", "UK"};

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      ArrayAdapter adapter = new ArrayAdapter<String>(this, 
      R.layout.activity_listview, countryArray);
      
      ListView listView = (ListView) findViewById(R.id.country_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/country_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">HelloWorld</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>

让我们尝试运行 ListView 应用程序 。 Eclipse AVD上安装应用程序并启动它,如果设置和应用都没有问题,它会显示以下模拟器窗口:

Android listView Layout

SimpleCursorAdapter

使用这个适配器,当数据源是一个数据库游标。SimpleCursorAdapter必须使用光标指定一个布局中的每一行,哪些应该被插入到光标列布局的视图。

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

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 创建一个视图的每一行游标使用所提供的布局插入每个fromColumns 项的相应 toViews 视图。