控件ListView
ListView的简单用法,先在布局文件中添加ListView控件:
接下来修改MainActivity中的代码:
由上面的代码可以知道,数据是无法直接传递给ListView的,需要借助适配器来完成。ArrayAdapter可以通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入即可,ArrayAdapter有多个构造函数,应该根据实际情况选择最合适的一种。在上面的构造函数中,一次传入当前上下文,ListView子项布局的id,以及要适配的数据。在上面代码中我们使用的是android.R.layout.simple_list_item_1作为ListView子项布局的id,这是Android内置的布局文件,里面只有一个TextView,可用于简单地显示一段文本。最后,调用ListView的setAdapter()方法,将构建好的适配器对象传递进去,这样ListView和数据之间就建立完成了。
定制ListView的界面
只显示一段文本的ListView实在是太单调的,所以需要对ListView的界面进行定制。首先建立一个Fruit类,如下:
然后需要为ListView的子项建立一个自定义的布局,在layout目录下新建fruit_item.xml,代码如下:
接下来我们要创建一个自定义的适配器,这个适配器继承自ArrayAdapter,并将泛型指定为Fruit类,新建FruitAdapter,代码如下:
这样将之前MainActivity中的ArrayAdapter改为FruitAdapter就可以了。
ListView的效率
目前,ListView的效率是很低的,因为在FruitAdapater的getView()方法中每次都将布局重新加载一次,当ListView快速滚动的时候这就会成为性能的瓶颈,仔细观察,getView()方法中还有一个convertView参数,这个参数用于将之前加载好的布局进行缓存,以便之后可以进行重用,那么修改之后的代码如下:
在getView()方法中进行了判断,如果convertView为空,则使用LayoutInflater去加载布局,如果不为空则直接对convertViewh进行重用。这样就大大提高了ListView的运行效率。但是每次还需要通过findViewById()方法来找到控件,也是十分费时的,其实控件也是可以缓存的,如下:
ViewHolder类如下:
通过以上两步的优化,ListView的运行效率已经很高了。
ListView的点击事件
控件ListView的更多相关文章
- [Android Pro] android控件ListView顶部或者底部也显示分割线
reference to : http://blog.csdn.net/lovexieyuan520/article/details/50846569 在默认的Android控件ListView在 ...
- 【Android】12.0 UI开发(三)——列表控件ListView的简单实现2
1.0 由于书上内容,已经和实际编程的兼容性已经不太友好,重写了项目,用于进一步学习列表控件ListView. 2.0 新建项目ListViewTest,其中文件目录如下: 3.0 ActivityC ...
- 从0系统学Android--3.5 最常用和最难用的控件---ListView
从0系统学Android-- 3.5 最常用和最难用的控件---ListView 本系列文章目录:更多精品文章分类 本系列持续更新中.... 3.5 最常用和最难用的控件---ListView Lis ...
- Android基础控件ListView基础操作
1.简介 基于Android基础控件ListView和自定义BaseAdapter适配器情况下,对ListView的数据删除和添加操作: public boolean add(E e) {//添加数据 ...
- WinFrom 公共控件 Listview 的使用
Listview绑定数据库数据展示与操作使用 1.拖一个Listview控件到项目中先将视图改为Details 2.编辑列 设置列头 添加columnHeader成员 Text 是显示的名称 3. ...
- Android列表控件ListView详解
ListView绝对可以称得上是Android中最常用的控件之一,几乎所有应用程序都会用到它. 由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候 ...
- 公共控件Listview
ListView属性中,Items是行的总集合,Items集合中的每一个是一行,Items集合里面有ListViewItem集合,这个集合实例化:ListViewItem li=new ListVie ...
- Android:控件ListView列表项与适配器结合使用
Listview是用来展示一些重复性的数据用的,比如一些列表集合数据展示到手机,需要适配器作为载体获取数据,最后将数据填充到布局. ListView里面的每个子项Item可以使一个字符串,也可以是一个 ...
- 安卓Android控件ListView获取item中EditText值
可以明确,现在没有直接方法可以获得ListView中每一行EditText的值. 解决方案:重写BaseAdapter,然后自行获取ListView中每行输入的EditText值. 大概算法:重写Ba ...
随机推荐
- 初次接触Groovy
其实我这两年业余时间一直断断续续的在学java,水平还不怎么样,不过起码能参与小项目写写接口了.现在我决定暂时放下大众的java,改学小众的Groovy,只因为我新拿到个offer,对方公司的自动化框 ...
- MvcPager分页控件的使用
1.引入MvcPager.dll(MvcPager分页控件:http://www.webdiyer.com/mvcpager/) 2.后台C# Controller: //Ddemo使用Webdiye ...
- 蓝牙BLE MTU规则与约定
1. 问题引言: 想在gatt client上(一般是手机上)传输长一点的数据给gatt server(一般是一个Bluetooth smart设备,即只有BLE功能的设备),但通过 writeCha ...
- random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串
openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...
- 【C51】单片机定时器介绍
标准51架构的单片机有2个定时器 :T0 和 T1,他们2个的用法几乎一样.下面主要讲T0定时器的用法. 初步认知 定时器 和 计数器 都是单片机中同一个模块.他们的实质都是: 加法存储计数器.对 ...
- 让android webView使用系统默认浏览器内核直接解析,不弹出选择浏览器选项
遇到一个需求,要求浏览网页的页面不去启动其他的浏览器,全部在自身的应用中. 解决方法 webview.setWebViewClient(new WebViewClient() { @Override ...
- How to disable and clear query ranges in sysquery form
query = new query('Query name'); queryBuildDataSource = query.dataSourceTable(tableNum('table name') ...
- 数据库.mdf
对于.mdf文件和.ldf数据库文件, 首先打开SQL Server Management Studio Express,登陆上后,右键点击数据库,附加->选择目标文件就可以了.
- MSP430之Hello World!
//#include "io430.h" #include "MSP430G2553.h" int main( void ) { volatile unsign ...
- http://blog.csdn.net/yunhua_lee/article/details/52710894
http://blog.csdn.net/yunhua_lee/article/details/52710894