Android ListView是一個組幾個項目,并顯示在垂直滾動列表。列表項會使用適配器自動插入到列表中,從內(nèi)容源,如數(shù)組或數(shù)據(jù)庫。
一個適配器實際上UI組件和數(shù)據(jù)源之間的橋梁,填充數(shù)據(jù)到UI組件。適配器可以用來提供數(shù)據(jù)如:spinner,列表視圖,網(wǎng)格視圖等。
ListView和GridView 是 AdapterView 的子類,它們可以填充綁定到一個適配器,它從外部源檢索數(shù)據(jù),并創(chuàng)建一個視圖表示每個數(shù)據(jù)項。
Android提供了幾個子適配器用于檢索不同類型的數(shù)據(jù),建立一個 AdapterView(即 ListView 或 GridView )視圖是有用的。最常見的兩種適配器是 ArrayAdapter 和 SimpleCursorAdapter。我們將看看兩個適配器各自的例子。
以下是具體的GridView中的重要屬性:
| 屬性 | 描述 |
|---|---|
| android:id | 這是唯一標(biāo)識的布局的ID。 |
| android:divider | 這是可拉伸或顏色列表項的繪制。 |
| android:dividerHeight | 這指定分頻器的高度。這可能是px, dp, sp, in 或 mm。 |
| android:entries | 指定引用數(shù)組的資源,將用于填充ListView。 |
| android:footerDividersEnabled | 當(dāng)設(shè)置為false,在ListView將不繪制每個頁腳視圖之前的分隔。默認值是true。 |
| android:headerDividersEnabled | 當(dāng)設(shè)置為false,在ListView將不繪制每個標(biāo)題視圖之后的分隔。默認值是true。 |
當(dāng)數(shù)據(jù)源是一個數(shù)組,可以使用這個適配器。默認情況下,ArrayAdapter創(chuàng)建一個視圖,每個陣列項目的每個項目上調(diào)用toString()并放置在TextView 作為內(nèi)容。要顯示在ListView一個字符串?dāng)?shù)組,初始化一個新的ArrayAdapter使用構(gòu)造函數(shù)來指定每個字符串的字符串?dāng)?shù)組的布局:
ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.ListView, StringArray);
下面是此構(gòu)造函數(shù)的參數(shù):
第一個參數(shù) this 是應(yīng)用程序上下文。在大多數(shù)的情況下使用this 。
第二個參數(shù)是定義在XML文件中的布局,它是 TextView 數(shù)組中的每個字符串。
最后一個參數(shù)是一個數(shù)組,字符串將被填充到文本視圖。
創(chuàng)建的數(shù)組適配器,然后簡單地調(diào)用ListView 對象 setAdapter() 方法,如下:
ListView listView = (ListView) findViewById(R.id.listview); listView.setAdapter(adapter);
在一個XML文件中,將定義列表視圖 res/layout 目錄下。在我們的例子中使用的是 activity_main.xml 文件。
下面的例子將通過簡單的步驟顯示如何使用ListView,創(chuàng)建自己的Android應(yīng)用程序。按照下面的步驟來創(chuàng)建一個Android應(yīng)用程序項目:ListView :
| Step | 描述 |
|---|---|
| 1 | 使用Eclipse IDE創(chuàng)建Android應(yīng)用程序,在包com.yiibai.helloworld下創(chuàng)建一個命名為 ListView 的項目 |
| 2 | 修改res/layout/activity_main.xml文件的默認內(nèi)容以包括ListView的內(nèi)容及屬性 |
| 3 | 在res/values/strings.xml文件中定義所需的常量 |
| 4 | 創(chuàng)建一個文本文件res/layout/activity_listview.xml。該文件將設(shè)置顯示所有的列表項。所以可以使用此文件自定義其字體,填充,顏色等。 |
| 6 | 運行該應(yīng)用程序啟動Android模擬器并驗證應(yīng)用程序所運行的結(jié)果。 |
以下是主活動文件 src/com.yiibai.listview/MainActivity.java 的內(nèi)容。這個文件可以包括每個的基本生命周期方法。
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 文件的內(nèi)容:
<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 內(nèi)容定義兩個常量:
<?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 文件的內(nèi)容:
<?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"