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上安装应用程序并启动它,如果设置和应用都没有问题,它会显示以下模拟器窗口:
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 视图。