Share via


Xamarin.Android ListView

ListView 是 Android 應用程式的重要 UI 元件;它會隨處使用,從功能表選項的簡短清單到聯繫人或因特網我的最愛清單。 它提供簡單的方式來呈現可格式化內建樣式或廣泛自定義的數據列卷動清單。

概觀

清單檢視和配接器包含在Android應用程式的最基本建置組塊中。 類別 ListView 提供彈性的方式來呈現數據,無論是簡短功能表還是長卷動清單。 它提供快速捲動、索引和單一或多個選取專案等可用性功能,可協助您為應用程式建置方便行動的使用者介面。 ListView 執行個體需要 Adapter 提供資料列檢視中所含的資料給它。

本指南說明如何在 Xamarin.Android 中實 ListView 作 和各種 Adapter 類別。 它也示範如何自定義 的外觀 ListView,並討論數據列重複使用的重要性,以減少記憶體耗用量。 還有一些討論活動生命週期如何影響 ListView 和使用 Adapter 。 如果您使用 Xamarin.iOS 在跨平臺應用程式上工作,則 ListView 控件的結構類似於 iOS UITableView (而 Android Adapter 類似於 UITableViewSource)。

首先,簡短教學課程會 ListView 使用基本程式碼範例來介紹 。 接下來,會提供更進階主題的連結,以協助您在真實世界應用程式中使用 ListView

注意

RecyclerView 工具是 更進階且更有彈性的 ListView版本。 因為 RecyclerView 是設計為 (和GridView) 的ListView後續任務,因此建議您使用 RecyclerView 而不是ListView用於新的應用程式開發。 如需詳細資訊,請參閱 RecyclerView

ListView 教學課程

ListViewViewGroup 會建立可捲動項目的清單。 清單專案會使用 IListAdapter自動插入清單。

在本教學課程中,您將建立可從字串陣列讀取的國家/地區名稱卷動清單。 選取清單專案時,快顯通知訊息會顯示清單中的專案位置。

啟動名為 HelloListView 的新專案。

建立名為 list_item.xml 的 XML 檔案,並將它儲存在 Resources/Layout/ 資料夾中。 插入下列專案:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp">
</TextView>

此檔案會定義將放置在 中的每個專案的版面 ListView配置。

開啟 MainActivity.cs 並修改 類別以擴充 ListActivity (而不是 Activity):

public class MainActivity : ListActivity
{

為方法插入下列程式代碼 OnCreate()

protected override void OnCreate (Bundle bundle)
{
    base.OnCreate (bundle);

    ListAdapter = new ArrayAdapter<string> (this, Resource.Layout.list_item, countries);

    ListView.TextFilterEnabled = true;

    ListView.ItemClick += delegate (object sender, AdapterView.ItemClickEventArgs args)
    {
        Toast.MakeText(Application, ((TextView)args.View).Text, ToastLength.Short).Show();
    };
}

請注意,這不會載入活動的版面配置檔案(您通常使用 的版面配置 SetContentView(int)檔案)。 相反地,設定 ListAdapter 屬性會自動新增 ListView 以填滿 的 ListActivity整個畫面。 這個方法會採用 ArrayAdapter<T>,其會管理要放入 ListView的清單項目陣列。 ArrayAdapter<T> 建構函式會採用應用程式 Context、每個清單專案的版面配置描述(在上一 T[] 個步驟中建立),以及或 Java.Util.IList<T> 要插入的物件陣列 ListView (下一步定義)。

TextFilterEnabled 屬性會開啟 的 ListView文字篩選,以便在用戶開始輸入時篩選清單。

ItemClick 事件可用來訂閱點擊的處理程式。 當中的專案時 ListView 已按下 ,會呼叫 處理程式和 。Toast 訊息隨即顯示,使用所按兩下專案的文字。

您可以使用平臺所提供的清單項目設計,而不是為 ListAdapter定義自己的版面配置檔案。 例如,請嘗試使用 Android.Resource.Layout.SimpleListItem1 而非 Resource.Layout.list_item

加入下列 using 陳述式:

using System;

接下來,將下列字串數位新增為 的成員 MainActivity

static readonly string[] countries = new String[] {
    "Afghanistan","Albania","Algeria","American Samoa","Andorra",
    "Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina",
    "Armenia","Aruba","Australia","Austria","Azerbaijan",
    "Bahrain","Bangladesh","Barbados","Belarus","Belgium",
    "Belize","Benin","Bermuda","Bhutan","Bolivia",
    "Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil","British Indian Ocean Territory",
    "British Virgin Islands","Brunei","Bulgaria","Burkina Faso","Burundi",
    "Cote d'Ivoire","Cambodia","Cameroon","Canada","Cape Verde",
    "Cayman Islands","Central African Republic","Chad","Chile","China",
    "Christmas Island","Cocos (Keeling) Islands","Colombia","Comoros","Congo",
    "Cook Islands","Costa Rica","Croatia","Cuba","Cyprus","Czech Republic",
    "Democratic Republic of the Congo","Denmark","Djibouti","Dominica","Dominican Republic",
    "East Timor","Ecuador","Egypt","El Salvador","Equatorial Guinea","Eritrea",
    "Estonia","Ethiopia","Faeroe Islands","Falkland Islands","Fiji","Finland",
    "Former Yugoslav Republic of Macedonia","France","French Guiana","French Polynesia",
    "French Southern Territories","Gabon","Georgia","Germany","Ghana","Gibraltar",
    "Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guinea","Guinea-Bissau",
    "Guyana","Haiti","Heard Island and McDonald Islands","Honduras","Hong Kong","Hungary",
    "Iceland","India","Indonesia","Iran","Iraq","Ireland","Israel","Italy","Jamaica",
    "Japan","Jordan","Kazakhstan","Kenya","Kiribati","Kuwait","Kyrgyzstan","Laos",
    "Latvia","Lebanon","Lesotho","Liberia","Libya","Liechtenstein","Lithuania","Luxembourg",
    "Macau","Madagascar","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands",
    "Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova",
    "Monaco","Mongolia","Montserrat","Morocco","Mozambique","Myanmar","Namibia",
    "Nauru","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand",
    "Nicaragua","Niger","Nigeria","Niue","Norfolk Island","North Korea","Northern Marianas",
    "Norway","Oman","Pakistan","Palau","Panama","Papua New Guinea","Paraguay","Peru",
    "Philippines","Pitcairn Islands","Poland","Portugal","Puerto Rico","Qatar",
    "Reunion","Romania","Russia","Rwanda","Sqo Tome and Principe","Saint Helena",
    "Saint Kitts and Nevis","Saint Lucia","Saint Pierre and Miquelon",
    "Saint Vincent and the Grenadines","Samoa","San Marino","Saudi Arabia","Senegal",
    "Seychelles","Sierra Leone","Singapore","Slovakia","Slovenia","Solomon Islands",
    "Somalia","South Africa","South Georgia and the South Sandwich Islands","South Korea",
    "Spain","Sri Lanka","Sudan","Suriname","Svalbard and Jan Mayen","Swaziland","Sweden",
    "Switzerland","Syria","Taiwan","Tajikistan","Tanzania","Thailand","The Bahamas",
    "The Gambia","Togo","Tokelau","Tonga","Trinidad and Tobago","Tunisia","Turkey",
    "Turkmenistan","Turks and Caicos Islands","Tuvalu","Virgin Islands","Uganda",
    "Ukraine","United Arab Emirates","United Kingdom",
    "United States","United States Minor Outlying Islands","Uruguay","Uzbekistan",
    "Vanuatu","Vatican City","Venezuela","Vietnam","Wallis and Futuna","Western Sahara",
    "Yemen","Yugoslavia","Zambia","Zimbabwe"
  };

這是將放入的 ListView字串數位。

執行應用程式。 您可以捲動清單,或輸入 來篩選清單,然後按下專案以查看訊息。 您應該會看到類似這樣的畫面︰

具有國家/地區名稱的 ListView 範例螢幕快照

請注意,使用硬式編碼字串數位並不是最佳設計作法。 本教學課程中會使用其中一個,以簡單起見,以示範 ListView 部件。 較佳的做法是參考外部資源所定義的字串陣列,例如 string-array 在專案 Resources/Values/Strings.xml 檔案中使用資源。 例如:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="app_name">HelloListView</string>
  <string-array name="countries_array">
    <item>Bahrain</item>
    <item>Bangladesh</item>
    <item>Barbados</item>
    <item>Belarus</item>
    <item>Belgium</item>
    <item>Belize</item>
    <item>Benin</item>
  </string-array>
</resources>

若要針對 ArrayAdapter使用這些資源字串,請取代原始的 ListAdapter 與下列專案一行:

string[] countries = Resources.GetStringArray (Resource.Array.countries_array);
ListAdapter = new ArrayAdapter<string> (this, Resource.Layout.list_item, countries);

執行應用程式。 您應該會看到類似這樣的畫面︰

具有較小名稱清單的 ListView 範例螢幕快照

使用 ListView 進一步

其餘主題(如下連結)全面探討如何使用 ListView 類別,以及您可以搭配使用的不同類型的配接器類型。 結構如下所示:

  • 視覺外觀 – 控制件的 ListView 元件及其運作方式。

  • 類別 – 用來顯示 ListView的類別概觀。

  • 在 ListView 中顯示資料 – 如何顯示簡單的資料清單、如何實 ListView's 作可用性功能、如何使用不同的內建數據列配置;以及配接器如何使用重新使用數據列檢視來儲存記憶體。

  • 自訂外觀 – 使用自定義版面配置、字型和色彩變更 的 ListView 樣式。

  • 使用 SQLite – 如何使用 顯示 SQLite 資料庫中 CursorAdapter的數據。

  • 活動生命週期 – 實作 ListView 活動時的設計考慮,包括您應該在生命週期中填入數據的位置,以及何時釋放資源。

討論(分成六個部分)從類別本身的概 ListView 觀開始,再引進逐步更複雜的如何使用類別範例。

摘要

這組主題介紹 ListView 並提供一些範例,說明如何使用 的 ListActivity內建功能。 它討論了允許彩色版面配置和使用 SQLite 資料庫的自定義實 ListView 作,並簡短地了解實 ListView 作上活動生命週期的相關性。