Android系统控件ListView是一种用于垂直显示的列表控件,如果显示内容过多,则会出现垂直滚动条。
ListView能够通过适配器将数据和自身绑定,在有限的屏幕上提供大量内容供用户选择,所以是经常使用的用户界面控件。同时,ListView支持点击事件处理,用户可以用少量的代码实现复杂的选择功能。例如,调用setAdapter()提供的数据和View子项,并通过setOnItemSelectedListener()方法监听ListView上子项选择事件。
若Activity由一个单一的列表控制,则Activity需继承ListActivity类而不是之前介绍的常规的Activity类。如果主视图仅仅只是列表,甚至不需要建立一个layout,ListActivity会为用户构建一个全屏幕的列表。如果想自定义布局,则需要确定ListView的id 为@android:id/list,以便ListActivity知道其Activity的主要清单。
下面就通过一个例子来加深对ListView的理解,如图1所示。

图1 ListView效果图
1.建立一个“ListViewDemo”程序
XML文件中的代码如代码清单1所示。
代码清单1 main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="//schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/selection"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="false"
/>
</LinearLayout>
2.修改ListViewDemo.java文件
在ListViewDemo.java文件中,首先需要为ListView创建适配器,配置和连接列表,添加ListView中所显示的内容。
代码清单2 ListViewDemo.java
public class ListViewDemo extends ListActivity {
TextView selection;
String[] items={"lorem", "ipsum", "dolor", "sit", "amet",
"consectetuer", "adipiscing", "elit", "morbi", "vel",
"ligula", "vitae", "arcu", "aliquet", "mollis",
"etiam", "vel", "erat", "placerat", "ante",
"porttitor", "sodales", "pellentesque", "augue", "purus"};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,items));
selection=(TextView)findViewById(R.id.selection);
}
public void onListItemClick(ListView parent, View v, int position,long id) {
selection.setText(items[position]);
}
}
继承ListActivity后,可以通过setListAdapter()方法设置列表。这种情况下,提供了一个ArrayAdapter包装的字符串数组。其中ArrayAdapter的第二个参数android.R.layout.simple_
list_item_1控制了ListView中行的显示,上例中android.R.layout.simple_list_item_1该值提供了标准的Android清单行:大字体、很多的填充、文本和白色。重写onListItemClick方法以在列表上子项的选择发生变化时及时更新其文本。
在默认情况下,ListView只对列表子项的点击事件进行监听。但ListView也跟踪用户的选择,或多个可能的选择列表,但它需要一些变化。
·在Java代码中调用ListView的setChoiceMode()方法来设置选择模式,可供选择的模式有:CHOICE_MODE_SINGLE和CHOICE_MODE_MULTIPLE两种。可以通过getListView()方法在ListActivity中获取ListView。
·在构造ArrayAdapter时,第二个参数选择使用以下两种参数可以使列表上子项单选或是复选:android.R.layout.simple_list_item_single_choice和android.R.layout.
simple_list_item_multiple_choice,如图2所示。

图2 单选、复选模式
通过调用getCheckedItemPositions()方法来判断用户选择的子项。