在使用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的缓存机制相关推荐

  1. Android笔记(二十五) ListView的缓存机制与BaseAdapter

    之前接触了ListView和Adapter,Adapter将数据源和View连接起来,实际应用中,我们要显示的数据往往有很多,而屏幕只有那么大,系统只能屏幕所能显示的内容,当我们滑动屏幕,会将旧的内容 ...

  2. android listview 缓存,探究Android ListView 的缓存机制

    概述 ListView 是继承AbListView,AbListView是所有列表类控件的基类. ListView的数据加载 在ListView数据加载中最关键的一个函数就是makeAndAddVie ...

  3. android 视频的缩略图 缓存机制和 异步加载缩略图

    在这次的工作开发项目中,涉及到一个视频缩略图的视频列表:这个在大家看来,制作视频缩略图就是两行代码就搞定的事.确实是这样的,百度一下,每个帖子都知道制作视频缩略图的方法,在这里确实也是一样的,但是我要 ...

  4. android异步加载视频缩略图,Android 视频缩略图的缓存机制和异步加载

    关注微信号:javalearns   随时随地学Java 或扫一扫 随时随地学Java 在这次的工作开发项目中,涉及到一个视频缩略图的视频列表:这个在大家看来,制作视频缩略图就是两行代码就搞定的事.确 ...

  5. Android学习系列--App缓存管理

    http://www.cnblogs.com/qianxudetianxia/archive/2012/02/20/2112128.html 无论大型或小型应用,灵活的缓存可以说不仅大大减轻了服务器的 ...

  6. Android:Drawable的缓存机制

    概要 在Android中,出于对内存优化的考虑,对于图片的存储使用了缓存机制,资源id相同的图片使用了同一个位图信息,如果对这些机制不了解的话开发过程中就会造成一些困扰.本文通过实例和分析Drawab ...

  7. Java缓存学习:CDN缓存机制

    CDN是什么? 关于CDN是什么,此前网友详细介绍过. CDN是Content Delivery Network的简称,即"内容分发网络"的意思.一般我们所说的CDN加速,一般是指 ...

  8. Android 学习--ListView 的使用(一)

    基于数组的ListView listview1.xml <?xml version="1.0" encoding="utf-8"?> <Lin ...

  9. android广播教程,Android学习笔记(广播机制)

    1.Android的广播机制介绍 收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同.接受广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理.好比我们收听交 ...

最新文章

  1. 最终版本Science级组合图表绘制
  2. 三层交换机如何封装trunk_锐捷交换机常用配置命令汇总
  3. Maven 3-Maven依赖版本冲突的分析及解决小结
  4. Git帮助文档阅读笔记----第二章
  5. java学习(64):类访问私有内部内部类方法
  6. php猴子找大王算法,教程方法;php实现猴子选大王问题算法实例电脑技巧-琪琪词资源网...
  7. netty ssl 服务器
  8. 流浪汉转型程序员,年薪超 70 万人民币!
  9. 计算机电子表格公式应用和操作,计算机电子表格公式应用常见错误及处理
  10. mysql的学生信息建表语句_SQL语句创建学生信息数据库表的示例
  11. PLSQL下载及安装
  12. 三菱触摸屏u盘上传和下载_威纶通TK6070iQ触摸屏通过U盘下载的详细步骤
  13. contiki CC2530 CC2430例子描述
  14. list to torch
  15. matlab解五元方程,哪位大侠帮忙解这个五元四次方程组
  16. 三维建筑动画的制作流程
  17. java php python校园通知事项打卡 微信小程序系统
  18. VMware Tools 详细安装教程及问题解决
  19. 在linux中关闭防火墙
  20. SQL 20008 加密函数

热门文章

  1. Codeforces Round #344 (Div. 2) B. Print Check
  2. ASP.NET web.config中customErrors节点说明
  3. 在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样?
  4. ecs服务器数据迁移_某国际物流集团的云迁移解决方案
  5. eclipse复制代码连接数据库404_再见,Eclipse ...
  6. 以OpenCV为例配置VS第三方库
  7. MFC程序在其他机器运行
  8. centos7建站php_centos7搭建php服务器
  9. 输入框不可以输入中文
  10. oracle目录删除后恢复,Oracle删除后不能重新安装的解决方法