• Android Video Tutorials

Android 列表檢視



Android ListView 是一種將多個專案分組並在垂直可滾動列表中顯示它們的檢視。列表項使用介面卡 (Adapter) 自動插入列表中,該介面卡從陣列或資料庫等源獲取內容。

List View

列表檢視

介面卡實際上是 UI 元件和填充 UI 元件資料的 資料來源 之間的橋樑。介面卡儲存資料並將資料傳送到介面卡檢視,檢視可以從介面卡檢視獲取資料並在不同的檢視(如 spinner、列表檢視、網格檢視等)上顯示資料。

ListViewGridViewAdapterView 的子類,可以透過將它們繫結到介面卡 (Adapter) 來填充它們,該介面卡從外部源檢索資料並建立表示每個資料條目的檢視。

Android 提供了幾個 Adapter 的子類,這些子類對於檢索不同型別的資料和為 AdapterView(即 ListView 或 GridView)構建檢視非常有用。常見的介面卡包括 ArrayAdapterBaseAdapterCursorAdapterSimpleCursorAdapterSpinnerAdapterWrapperListAdapter。我們將分別檢視這兩個介面卡的示例。

ListView 屬性

以下是 GridView 的重要屬性:

序號 屬性和描述
1

android:id

這是唯一標識佈局的 ID。

2

android:divider

這是在列表項之間繪製的可繪製物件或顏色。

3

android:dividerHeight

這指定了分隔符的高度。可以是 px、dp、sp、in 或 mm。

4

android:entries

指定將填充 ListView 的陣列資源的引用。

5

android:footerDividersEnabled

設定為 false 時,ListView 不會在每個頁尾檢視之前繪製分隔符。預設值為 true。

6

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);

您將在 res/layout 目錄下的 XML 檔案中定義您的列表檢視。在我們的示例中,我們將使用 activity_main.xml 檔案。

示例

下面的示例將引導您完成簡單的步驟,說明如何使用 ListView 建立您自己的 Android 應用程式。請按照以下步驟修改我們在Hello World 示例章節中建立的 Android 應用程式:

步驟 描述
1 您將使用 Android Studio IDE 建立一個 Android 應用程式,並在包com.example.ListDisplay下將其命名為ListDisplay,如Hello World 示例章節中所述。
2 修改res/layout/activity_main.xml檔案的預設內容,以包含具有自解釋屬性的 ListView 內容。
3 無需更改 strings.xml,Android studio 會處理預設字串常量。
4 建立一個文字檢視檔案res/layout/activity_listview.xml。此檔案將具有顯示所有列表項的設定。因此,您可以使用此檔案自定義其字型、填充、顏色等。
6 執行應用程式以啟動 Android 模擬器並驗證對應用程式所做的更改的結果。

以下是修改後的主活動檔案src/com.example.ListDisplay/ListDisplay.java的內容。此檔案可以包含每個基本生命週期方法。

package com.example.ListDisplay;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListDisplay extends Activity {
   // Array of strings...
   String[] mobileArray = {"Android","IPhone","WindowsMobile","Blackberry",
      "WebOS","Ubuntu","Windows7","Max OS X"};
   
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      
      ArrayAdapter adapter = new ArrayAdapter<String>(this, 
         R.layout.activity_listview, mobileArray);
      
      ListView listView = (ListView) findViewById(R.id.mobile_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/mobile_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">ListDisplay</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>

讓我們嘗試執行我們剛剛修改的Hello World!應用程式。我假設您在進行環境設定時建立了AVD。要從 Android Studio 執行應用程式,請開啟專案的一個活動檔案,然後單擊工具欄中的執行Eclipse Run Icon圖示。Android Studio 將應用程式安裝到您的 AVD 並啟動它,如果您的設定和應用程式一切正常,它將顯示以下模擬器視窗:

List View

SimpleCursorAdapter

當您的資料來源是資料庫遊標時,可以使用此介面卡。使用SimpleCursorAdapter時,必須指定一個佈局,用於Cursor中的每一行以及應將Cursor中的哪些列插入到佈局的哪些檢視中。

例如,如果您想建立一個人的姓名和電話號碼列表,您可以執行一個查詢,該查詢返回一個遊標,其中包含每個人的一行以及姓名和號碼的列。然後,您建立一個字串陣列,指定要從Cursor中放入每個結果佈局的列,以及一個整數陣列,指定每列應放置的相應檢視:

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 使用提供的佈局為Cursor中的每一行建立一個檢視,方法是將每個來自fromColumns的項插入到相應的toViews檢視中。

android_user_interface_layouts.htm
廣告
© . All rights reserved.