- 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视图中。