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 視圖。