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 教學課程
ListView
是 ViewGroup
會建立可捲動項目的清單。 清單專案會使用 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
部件。 較佳的做法是參考外部資源所定義的字串陣列,例如 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's
作可用性功能、如何使用不同的內建數據列配置;以及配接器如何使用重新使用數據列檢視來儲存記憶體。自訂外觀 – 使用自定義版面配置、字型和色彩變更 的
ListView
樣式。使用 SQLite – 如何使用 顯示 SQLite 資料庫中
CursorAdapter
的數據。活動生命週期 – 實作
ListView
活動時的設計考慮,包括您應該在生命週期中填入數據的位置,以及何時釋放資源。
討論(分成六個部分)從類別本身的概 ListView
觀開始,再引進逐步更複雜的如何使用類別範例。
- ListView 組件和功能
- 使用數據填入 ListView
- 自訂 ListView 的外觀
- 使用 CursorAdapters
- 使用 ContentProvider
- ListView 和活動生命週期
摘要
這組主題介紹 ListView
並提供一些範例,說明如何使用 的 ListActivity
內建功能。 它討論了允許彩色版面配置和使用 SQLite 資料庫的自定義實 ListView
作,並簡短地了解實 ListView
作上活動生命週期的相關性。