- Android 基礎
- Android - 首頁
- Android - 概述
- Android - 環境搭建
- Android - 架構
- Android - 應用元件
- Android - Hello World 示例
- Android - 資源
- Android - 活動 (Activities)
- Android - 服務 (Services)
- Android - 廣播接收器 (Broadcast Receivers)
- Android - 內容提供器 (Content Providers)
- Android - 片段 (Fragments)
- Android - 意圖/過濾器 (Intents/Filters)
- Android - 使用者介面
- Android - UI 佈局
- Android - UI 控制元件
- Android - 事件處理
- Android - 樣式和主題
- Android - 自定義元件
- Android 高階概念
- Android - 拖放
- Android - 通知
- 基於位置的服務
- Android - 傳送郵件
- Android - 傳送簡訊
- Android - 電話呼叫
- 釋出 Android 應用
- Android 常用示例
- Android - 警報對話方塊
- Android - 動畫
- Android - 音訊捕捉
- Android - AudioManager
- Android - 自動完成
- Android - 最佳實踐
- Android - 藍牙
- Android - 相機
- Android - 剪貼簿
- Android - 自定義字型
- Android - 資料備份
- Android - 開發者工具
- Android - 模擬器
- Android - Facebook 整合
- Android - 手勢
- Android - Google 地圖
- Android - 圖片特效
- Android - ImageSwitcher
- Android - 內部儲存
- Android - JetPlayer
- Android - JSON 解析器
- Android - Linkedin 整合
- Android - 載入進度指示器
- Android - 本地化
- Android - 登入螢幕
- Android - MediaPlayer
- Android - 多點觸控
- Android - 導航
- Android - 網路連線
- Android - NFC 指南
- Android - PHP/MySQL
- Android - 圓形進度條
- Android - 進度條
- Android - 推送通知
- Android - RenderScript
- Android - RSS 閱讀器
- Android - 螢幕錄製
- Android - SDK 管理器
- Android - 感測器
- Android - 會話管理
- Android - Shared Preferences
- Android - SIP 協議
- Android - 拼寫檢查器
- Android - SQLite 資料庫
- Android - 支援庫
- Android - 測試
- Android - 文字轉語音
- Android - TextureView
- Android - Twitter 整合
- Android - UI 設計
- Android - UI 模式
- Android - UI 測試
- Android - WebView 佈局
- Android - Wi-Fi
- Android - 小部件
- Android - XML 解析器
- Android 資源
- Android - 問答
- Android - 資源
- Android - 討論
Android 列表檢視
Android ListView 是一種將多個專案分組並在垂直可滾動列表中顯示它們的檢視。列表項使用介面卡 (Adapter) 自動插入列表中,該介面卡從陣列或資料庫等源獲取內容。
列表檢視
介面卡實際上是 UI 元件和填充 UI 元件資料的 資料來源 之間的橋樑。介面卡儲存資料並將資料傳送到介面卡檢視,檢視可以從介面卡檢視獲取資料並在不同的檢視(如 spinner、列表檢視、網格檢視等)上顯示資料。
ListView 和 GridView 是 AdapterView 的子類,可以透過將它們繫結到介面卡 (Adapter) 來填充它們,該介面卡從外部源檢索資料並建立表示每個資料條目的檢視。
Android 提供了幾個 Adapter 的子類,這些子類對於檢索不同型別的資料和為 AdapterView(即 ListView 或 GridView)構建檢視非常有用。常見的介面卡包括 ArrayAdapter、BaseAdapter、CursorAdapter、SimpleCursorAdapter、SpinnerAdapter 和 WrapperListAdapter。我們將分別檢視這兩個介面卡的示例。
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 執行應用程式,請開啟專案的一個活動檔案,然後單擊工具欄中的執行
圖示。Android Studio 將應用程式安裝到您的 AVD 並啟動它,如果您的設定和應用程式一切正常,它將顯示以下模擬器視窗:
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檢視中。
