ListView 是 Android 应用程序的重要 UI 组件;它随处使用,从菜单选项的简短列表到联系人或 Internet 收藏夹的长列表。 它提供了一种简单的方法来显示行的滚动列表,这些行可以使用内置样式进行格式化或广泛自定义。
列表视图和适配器包含在 Android 应用程序的最基本的构建基块中。 类
ListView
提供了一种灵活的方法来呈现数据,无论是短菜单还是长滚动列表。 它提供快速滚动、索引和单个或多个选择等可用性功能,帮助你为应用程序构建移动友好的用户界面。 实例
ListView
需要
适配器
向它馈送行视图中包含的数据。
本指南介绍如何在 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
自动将列表项插入到列表中。
在本教程中,你将创建从字符串数组中读取的国家/地区名称的可滚动列表。 选择列表项后,Toast 消息将显示该项在列表中的位置。
启动名为
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
中的列表项的数组。
TheArrayAdapter<T>
构造函数采用应用程序 Context
、 (上一步) 创建的每个列表项的布局说明,以及 T[]
或Java.Util.IList<T>
要插入到 中的对象的数组ListView
(定义下一个) 。
TheTextFilterEnabled
属性为 ListView
启用文本筛选,以便在用户开始键入时筛选列表。
TheItemClick
event 可用于订阅单击的处理程序。 当中的项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
实现的相关性。
AccessoryViews (示例)
BasicTableAndroid (示例)
BasicTableAdapter (示例)
BuiltInViews (示例)
CustomRowView (示例)
FastScroll (示例)
SectionIndex (示例)
SimpleCursorTableAdapter (示例)
CursorTableAdapter (示例)
活动生命周期教程
在 Xamarin.iOS) 中使用表和单元格 (
ListView 类引用
ListActivity 类引用
BaseAdapter 类引用
ArrayAdapter 类引用
CursorAdapter 类引用