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