位置:首頁 > 手機開發 > Android開發教學 > Android ListView

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上安裝應用程序並啟動它,如果設置和應用都冇有問題,它會顯示以下模擬器窗口:

Android listView Layout

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