Android系統(tǒng)控件ListView是一種用于垂直顯示的列表控件,如果顯示內(nèi)容過多,則會出現(xiàn)垂直滾動條。
ListView能夠通過適配器將數(shù)據(jù)和自身綁定,在有限的屏幕上提供大量內(nèi)容供用戶選擇,所以是經(jīng)常使用的用戶界面控件。同時,ListView支持點擊事件處理,用戶可以用少量的代碼實現(xiàn)復(fù)雜的選擇功能。例如,調(diào)用setAdapter()提供的數(shù)據(jù)和View子項,并通過setOnItemSelectedListener()方法監(jiān)聽ListView上子項選擇事件。
若Activity由一個單一的列表控制,則Activity需繼承ListActivity類而不是之前介紹的常規(guī)的Activity類。如果主視圖僅僅只是列表,甚至不需要建立一個layout,ListActivity會為用戶構(gòu)建一個全屏幕的列表。如果想自定義布局,則需要確定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="http://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創(chuàng)建適配器,配置和連接列表,添加ListView中所顯示的內(nèi)容。
代碼清單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()方法設(shè)置列表。這種情況下,提供了一個ArrayAdapter包裝的字符串數(shù)組。其中ArrayAdapter的第二個參數(shù)android.R.layout.simple_
list_item_1控制了ListView中行的顯示,上例中android.R.layout.simple_list_item_1該值提供了標準的Android清單行:大字體、很多的填充、文本和白色。重寫onListItemClick方法以在列表上子項的選擇發(fā)生變化時及時更新其文本。
在默認情況下,ListView只對列表子項的點擊事件進行監(jiān)聽。但ListView也跟蹤用戶的選擇,或多個可能的選擇列表,但它需要一些變化。
·在Java代碼中調(diào)用ListView的setChoiceMode()方法來設(shè)置選擇模式,可供選擇的模式有:CHOICE_MODE_SINGLE和CHOICE_MODE_MULTIPLE兩種?梢酝ㄟ^getListView()方法在ListActivity中獲取ListView。
·在構(gòu)造ArrayAdapter時,第二個參數(shù)選擇使用以下兩種參數(shù)可以使列表上子項單選或是復(fù)選:android.R.layout.simple_list_item_single_choice和android.R.layout.
simple_list_item_multiple_choice,如圖2所示。

圖2 單選、復(fù)選模式
通過調(diào)用getCheckedItemPositions()方法來判斷用戶選擇的子項。