【Anroid】9.1 ListView相关类及其适配器
分类:C#、Android、VS2015;
创建日期:2016-02-18
一、简介
列表视图(ListView)是Android应用程序中使用最频繁的UI组件,从无处不在短菜单选项列表到冗长的联系人或internet收藏夹列表……都会用它来实现。
ListView控件的用法非常灵活,既可以使用内置的视图呈现基本的样式,也可以用自定义视图呈现各种特殊的视觉效果。
要完全掌握Android提供的ListView控件的用法,需要解决下面的问题:
(1)如何用Android内置的视图呈现列表视图中的每一项
(2)如何实现不同的适配器类。
(3)如何用自定义的视图呈现列表视图中每一项的外观。
(4)如何读取SQLite数据库填充列表项。
(5)ListView性能优化以及活动生命周期对ListView的影响。
ListView控件要求提供一个适配器(Adapter)来描述每一行的视图格式。在Android应用程序中,既可以直接使用Android内置的适配器,也可以创建自定义的适配器。
实际上,在前面的章节中,我们已经多次使用ListView了,只不过这一章再将其系统地介绍一下它的基本用法而已。
1、ListView相关类
ListView中的每一行都有自己的View。该View可能是在Android.Resources中定义的内置视图(built-in views),也可能是你自定义的视图。每一行既可以使用相同的View,也可以使用不同的View。
下图是呈现ListView时需要使用的主要类,学习这一章的内容之前,最好先仔细看一下各个类之间的继承关系:
(1)ListView
UI元素,用于呈现一系列可滚动的列表项。在手机上,如果希望让列表项占用整个屏幕,可让活动页直接继承自ListActivity类而不是继承自Activity类。如果不希望让这些列表项占用整个屏幕,可在布局页中添加一个或多个ListView来呈现。
(2)View
ListView上下文要求每行都必须提供一个View,这些View可以是任何UI元素。
2、ListView适配器类
下面列出这些视图适配器的含义及其应用场合。
(1)BaseAdapter类
BaseAdapter是所有适配器的基类,该类实现了将ListView绑定到数据源的基本功能。当视图中的元素内容是动态的或者不是事先确定的,可以用继承自BaseAdapter的类去实现。
(2)BaseAdapter<T>类--最常用
在实际项目中,很多时候应用程序一般都有自己的业务实体类,而不仅仅是字符串的集合。为了扩展这些功能,大部分情况下都是用继承自BaseAdapter<T>的类来实现自定义的适配器。
用继承自BaseAdapter<T>的类来实现自定义的适配器是建议的实现方式。
(3)ArrayAdapter类
除了BaseAdapter类以外,安卓系统还内置了ArrayAdapter类。不过,用C#编写Android程序时,一般很少用它来实现。
(4)ArrayAdapter<T>类
对于多列数据项,除了用继承自BaseAdapter<T>类来实现以外,还可以用自定义的继承自ArrayAdapter<T>的泛型类来呈现,不过,这种用法在C# 编程中并不多见,最常用的还是用继承自BaseAdapter<T>类来实现。
(5)ListActivity类
安卓系统内置了ListActivity类,在活动页中,也可以直接让自定义的活动继承自ListActivit而不是继承自Activity,此方式不需要自定义布局,适用于比较简单的情况。
ListActivity会自动创建列表视图,并公开一个ListAdapter属性,扩充类通过该属性,即可呈现行视图。
二、本章示例主界面
1、运行截图
2、MainActivity.cs文件中对应的代码
chItems.Add(new Chapter()
{
ChapterName = "第9章 列表视图",
ChapterItems = new ChItem[]
{
new ChItem { type=typeof(ch0901BuildInViewsMain), Title="例9-1 内置行视图的分类", Desc = "演示如何呈现Android内置的各种行视图" },
new ChItem { type=typeof(ch0902Main), Title="例9-2 自定义视图", Desc = "演示如何自定义行视图" },
}
});
【Anroid】9.1 ListView相关类及其适配器的更多相关文章
- Android随笔之——Android时间、日期相关类和方法
今天要讲的是Android里关于时间.日期相关类和方法.在Android中,跟时间.日期有关的类主要有Time.Calendar.Date三个类.而与日期格式化输出有关的DateFormat和Simp ...
- 21 BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类
21_BasicTaskScheduler基本任务调度器(一)——Live555源码阅读(一)任务调度相关类 BasicTaskScheduler基本任务调度器 BasicTaskScheduler基 ...
- 8 延时队列相关类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/oloroso ...
- 4 Handler相关类——Live555源码阅读(一)基本组件类
这是Live555源码阅读的第一部分,包括了时间类,延时队列类,处理程序描述类,哈希表类这四个大类. Handler相关类概述 处理程序相关类一共有三个,其没有派生继承关系,但是其有友元关系和使用关系 ...
- MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)
前面讲了模态对话框和非模态对话框,本节来将一种特殊的对话框--属性页对话框. 属性页对话框的分类 属性页对话框想必大家并不陌生,XP系统中桌面右键点属性,弹出的就是属性页对话框,它通过标签切换各个页面 ...
- 安卓开发_浅谈ListView(SimpleAdapter数组适配器)
安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...
- android 6.0 SDK中删除HttpClient的相关类的解决方法
一.出现的情况 在eclipse或 android studio开发, 设置android SDK的编译版本为23时,且使用了httpClient相关类的库项目:如android-async-http ...
- Android 6.0删除Apache HttpClient相关类的解决方法
相应的官方文档如下: 上面文档的大致意思是,在Android 6.0(API 23)中,Google已经移除了Apache HttpClient相关的类,推荐使用HttpUrlConnection. ...
- List 接口以及实现类和相关类源码分析
List 接口以及实现类和相关类源码分析 List接口分析 接口描述 用户可以对列表进行随机的读取(get),插入(add),删除(remove),修改(set),也可批量增加(addAll),删除( ...
随机推荐
- 自定义Lisp透明命令
我们知道在CAD中,如果我们在命令前面加一个单引号,则为透明命令.透明命令就是一个命令还没结束,中间插入另一个命令,然后继续完成前一个命令.插入的命令即透明命令,插入透明命令是为了更方便的完成第一个命 ...
- ZH奶酪:PHP解析URL及parse_url、parse_str、explode、implode函数说明
首先看一下解析任意URL的代码: (1)获取协议类型:例如参考链接中的:http (2)获取主机地址:例如参考链接中的:my.oschina.net (3)获取当前页面在服务器的路径:例如参考链接中的 ...
- iOS Strong 和 weak
iOS 5 中对属性的设置新增了strong 和weak关键字来修饰属性(iOS 5 之前不支持ARC) strong 用来修饰强引用的属性: @property (strong) SomeClass ...
- C语言的角落——C之很常使用特性(一)
本文搜集整理了一些之前博客中没有提到的,C语言不经常使用的特性,算是对C系列的最后一次补充. 对C语言有兴趣的朋友能够浏览一下,查漏补缺. 变长參数列表 <stdarg.h> 头文件定义了 ...
- 警察与小偷的实现之中的一个client与服务端通信
来源于ISCC 2012 破解关第四题 目的是通过逆向police.实现一个thief,可以与police进行通信 实际上就是一个RSA加密通信的样例,我们通过自己编写client和服务端来实现上面的 ...
- DevExpress.XtraLayout.LayoutControl 动态添加控件
// Create an item within a specified group,// bound to a specified data field with the specified edi ...
- Linux密钥认证错误解决
问题描述: Xshell用key认证登录,提示所选的用户密钥未在远程主机上注册 问题解决: 查看日志/var/log/secure,基本上都是用户根目录的权限问题 根据日志提示: Authentica ...
- jquery serialize对json的包装用法
jquery对象.serialize() 可以多用于表单对数据封装提交 能够收表参数,形成一个json格式字符串, 前提是:必须为每一个表单项取一个name属性 对元素 设置 name属性, 然后 ...
- write()和prinln()的区别?
输出数字不同: write()输出数字转换为字符,println原样输出. 输出null不同: write()输出引用类型的时候调用的toString转换为String数据,因此如果对象为null那么 ...
- Warning: RPMDB altered outside of yum.的解决办法
错误提示: Warning: RPMDB altered outside of yum 解决办法: 删除yum的历史记录rm -rf /var/lib/yum/history/*.sqlite 上面的 ...