2018-07-28 ListView的简单用法

2018-07-30  本文已影响0人  灼灼其华_b157

ListView是我们在使用手机过程中最常用到的一个功能,就是滑动屏幕,将屏幕之外的信息加载出来,接下来我没问来看一下具体的使用

首先是创建一个布局文件 让ListView充满整个屏幕 接下来我们要提供一组数据,让手机屏幕显示出来, 要显示的数组数据 不过数组中的数据是不能传递给ListView的,我们还需要一个中介桥梁,也就是适配器ArrayAdapter<> ,<>里面的内容是适配器要适配的数据类型,这里我们的数组是单纯的字符串数组,所以适配类型是String 适配器ArrayAdapter

适配器这里要传入三个参数,一个是当前上下文MainActivity.this,一个是ListView的默认子项布局Idandroid.R.layout.simple_list_item_1,最后一个就是我们需要适配的数据data

最后一步就是将数据显示到界面上了,这里我们只需要用listView对象去调用setAdapter()方法就行了
总而言之,ListView就是将数据通过适配器这个桥梁展示到界面上的一个可滑动控件
接下来我们来看更复杂一点的,因为只能显示一段文本的界面太单调了
我们现在要实现每一行都显示图片+文字的ListView

首先第一步适配数据,我们没有直接的数据类型,所以我们要先创建一个Fruit类 Fruit适配数据类
这里我们定义了一个图片的Id和水果名字
接下来我们的新定义的界面的单独每一行,都是一个子项布局,所以我们要自定义一个子项布局
子项布局 可以看到这个布局只是提供了一个用于展示的框架,并没有直接的展示数据

自然主布局还是只有一个ListView,数据类型都准备好了,接下来我们要面对最复杂的就是自定义适配器,因为我们没有一个直接的适配器能实现我们需要的效果

然后到了关键一步,创建一个自定义的适配器且继承ArrayAdapter,重写父类一组含三个参数的构造函数,并将列表项子布局的id保存下来。接着重写getView()方法,先用getItem(position)得到当前Item项的Animal实例,再用LayoutInflater系列方法把子布局传入当前布局得到一个View,接着调用这个View的findViewById()找到ImageView和TextView实例,这样就可以把从当前项对象get的内容设置到这两个控件里去显示图片和文字了。 自定义适配器

适配器也做好了,最后我们就要在主活动将数据导入适配器了


数据适配传入ListVIew
运行效果图

提高ListView运行效率
这里提升效率主要从两个方面去做
1.屏幕每次加载的数据可以储存起来,下次加载就会更加快速
在getView中有个参数View convertView就是来存储加载过的数据的


image.png

我们通过一个if判断,若是空就重新加载获取,非空就直接读取

2.图片id和名字的初始化,每次都会获取控件的实例,但是有的我们已经加载过了,在获取就没有意义

这里我们定义个一个内部类Holder(持有者)对控件实例进行缓存,当convertView为空时,创建Holder对象,将控件的实例都存在holder中,再调用setTag
方法,将holder对象存在view中,如果不为空直接取出来


image.png
上一篇 下一篇

猜你喜欢

热点阅读