Android学习——ListView的缓存机制
在使用ListView的时候,需要加载适配器和数据源,这篇文章主要介绍一下ListView的使用以及利用ListView的缓存机制来减少系统的初始化时间。
ListView的使用
ListView和ViewPager很类似,首先在ArrayList中存放数据源,并把它作为Adapter的构造函数的参数传入Adapter类中,之后在Adapter中实现相应方法,具体代码如下:
1.在ArrayList中存放数据源
由于ListView中,每一个View是一个Item,所以数据源中需要存放Item当中每一个View的信息,因此,可以定义一个自定义类来存放这些需要存放的信息。代码如下:
XML中,声明Item,包括一个ImageView和一个TextView
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><ImageViewandroid:layout_width="80dp"android:layout_height="80dp"android:src="@drawable/add"android:id="@+id/goods_iv"/><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/goods_tv"/></LinearLayout>
自定义Goods类来存放需要修改的信息:
public class Goods {public String text;public int ImageId; }
在Activity中声明ArrayList,并生成数据源:
ArrayList<Goods> goods=new ArrayList<>();for(int i=1;i<=20;i++){Goods good=new Goods();good.ImageId=R.drawable.good;good.text="商品"+i;goods.add(good);}
2.构造适配器
ListView的适配器为BaseAdapter,其中getCount(),getItem()和getItemID()三个方法与PageAdapter类似,最有讲究的便是getView方法,这里着重讲解一下getView的写法:
getView方法,主要是获取position位置的View对象。我们可以每次都声明一个新的View,并通过findViewById获取Item中的每个控件,但这样会用到大量的耗时操作,并重复占用资源。因此,我们可以利用ListView的缓存机制,来获取这些View对象。
首先,在BaseAdapter中,声明一个内部类,用来存放已经缓存好的每一个组件:
class ViewHolder{public ImageView iv;public TextView tv;}
然后,对应getView每一个需要加载的View来说,判断他是否已经被加载过,如果没有,便进行加载,并利用View的setTag方法,把已经加载的View和组件相关联:
@Overridepublic View getView(int position, View convertView, ViewGroup parent){ViewHolder viewHolder;if(convertView==null){convertView=inflater.inflate(R.layout.item_goods,null);viewHolder=new ViewHolder();viewHolder.iv= (ImageView) convertView.findViewById(R.id.goods_iv);viewHolder.tv= (TextView) convertView.findViewById(R.id.goods_tv);convertView.setTag(viewHolder);}
若已经加载过,则直接取出,进行组件的修改即可:
else{viewHolder= (ViewHolder) convertView.getTag();}Goods good=goodslist.get(position);viewHolder.iv.setImageResource(good.ImageId);viewHolder.tv.setText(good.text);return convertView
3.ListView与适配器向关联
与ViewPager类似,这里只给出代码,不再赘述
GoodsAdapter adapter=new GoodsAdapter(goods,getContext());listview.setAdapter(adapter);
转载于:https://www.cnblogs.com/J-inx/p/6622104.html
Android学习——ListView的缓存机制相关推荐
- Android笔记(二十五) ListView的缓存机制与BaseAdapter
之前接触了ListView和Adapter,Adapter将数据源和View连接起来,实际应用中,我们要显示的数据往往有很多,而屏幕只有那么大,系统只能屏幕所能显示的内容,当我们滑动屏幕,会将旧的内容 ...
- android listview 缓存,探究Android ListView 的缓存机制
概述 ListView 是继承AbListView,AbListView是所有列表类控件的基类. ListView的数据加载 在ListView数据加载中最关键的一个函数就是makeAndAddVie ...
- android 视频的缩略图 缓存机制和 异步加载缩略图
在这次的工作开发项目中,涉及到一个视频缩略图的视频列表:这个在大家看来,制作视频缩略图就是两行代码就搞定的事.确实是这样的,百度一下,每个帖子都知道制作视频缩略图的方法,在这里确实也是一样的,但是我要 ...
- android异步加载视频缩略图,Android 视频缩略图的缓存机制和异步加载
关注微信号:javalearns 随时随地学Java 或扫一扫 随时随地学Java 在这次的工作开发项目中,涉及到一个视频缩略图的视频列表:这个在大家看来,制作视频缩略图就是两行代码就搞定的事.确 ...
- Android学习系列--App缓存管理
http://www.cnblogs.com/qianxudetianxia/archive/2012/02/20/2112128.html 无论大型或小型应用,灵活的缓存可以说不仅大大减轻了服务器的 ...
- Android:Drawable的缓存机制
概要 在Android中,出于对内存优化的考虑,对于图片的存储使用了缓存机制,资源id相同的图片使用了同一个位图信息,如果对这些机制不了解的话开发过程中就会造成一些困扰.本文通过实例和分析Drawab ...
- Java缓存学习:CDN缓存机制
CDN是什么? 关于CDN是什么,此前网友详细介绍过. CDN是Content Delivery Network的简称,即"内容分发网络"的意思.一般我们所说的CDN加速,一般是指 ...
- Android 学习--ListView 的使用(一)
基于数组的ListView listview1.xml <?xml version="1.0" encoding="utf-8"?> <Lin ...
- android广播教程,Android学习笔记(广播机制)
1.Android的广播机制介绍 收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同.接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理.好比我们收听交 ...
最新文章
- 最终版本Science级组合图表绘制
- 三层交换机如何封装trunk_锐捷交换机常用配置命令汇总
- Maven 3-Maven依赖版本冲突的分析及解决小结
- Git帮助文档阅读笔记----第二章
- java学习(64):类访问私有内部内部类方法
- php猴子找大王算法,教程方法;php实现猴子选大王问题算法实例电脑技巧-琪琪词资源网...
- netty ssl 服务器
- 流浪汉转型程序员,年薪超 70 万人民币!
- 计算机电子表格公式应用和操作,计算机电子表格公式应用常见错误及处理
- mysql的学生信息建表语句_SQL语句创建学生信息数据库表的示例
- PLSQL下载及安装
- 三菱触摸屏u盘上传和下载_威纶通TK6070iQ触摸屏通过U盘下载的详细步骤
- contiki CC2530 CC2430例子描述
- list to torch
- matlab解五元方程,哪位大侠帮忙解这个五元四次方程组
- 三维建筑动画的制作流程
- java php python校园通知事项打卡 微信小程序系统
- VMware Tools 详细安装教程及问题解决
- 在linux中关闭防火墙
- SQL 20008 加密函数
热门文章
- Codeforces Round #344 (Div. 2) B. Print Check
- ASP.NET web.config中customErrors节点说明
- 在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样?
- ecs服务器数据迁移_某国际物流集团的云迁移解决方案
- eclipse复制代码连接数据库404_再见,Eclipse ...
- 以OpenCV为例配置VS第三方库
- MFC程序在其他机器运行
- centos7建站php_centos7搭建php服务器
- 输入框不可以输入中文
- oracle目录删除后恢复,Oracle删除后不能重新安装的解决方法