Imageloader, listview.notifyDataSetChanged刷新问题,图片闪烁
2015-11-06 11:00
323 查看
转载请注明出处:/article/8093883.html
我在项目中,用了ImageLoader来显示图片,这样引出一个问题,偶尔在我调用notifyDataSetChanged这个方法时候,图片全部闪烁一下,原因是图片全部重新加载了一次,导致闪烁。
下面是我之前的getView方法中。下面的ImageLoader直接调用,造成每次notifyDataSetChanged,重新调用了ImageLoader方法。
下面我做出了修改,如果当前图片是之前的图片,则不会调用ImageLoader,否则调用ImageLoader。
通过ImageView.getTag和setTag方法来,判定当前图片是否是之前的,如果是之前,则不会刷新图片,如果不是,再刷新。
我在项目中,用了ImageLoader来显示图片,这样引出一个问题,偶尔在我调用notifyDataSetChanged这个方法时候,图片全部闪烁一下,原因是图片全部重新加载了一次,导致闪烁。
下面是我之前的getView方法中。下面的ImageLoader直接调用,造成每次notifyDataSetChanged,重新调用了ImageLoader方法。
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item_app_wall2, parent, false); holder = new ViewHolder(); holder.icon = (ImageView) convertView.findViewById(R.id.app_icon); holder.name = (MarqueeText) convertView.findViewById(R.id.app_name); // holder.grade = (ImageView) // convertView.findViewById(R.id.grade); holder.size = (TextView) convertView.findViewById(R.id.app_size); holder.count = (TextView) convertView.findViewById(R.id.app_count); holder.ratingBar = (RatingBar) convertView.findViewById(R.id.grade); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ImageLoader.getInstance().displayImage(searchAppList.get(position).getHttpIco(), holder.icon, DisplayImageOptionUtil.getInstance().getOptions()); holder.name.setText(searchAppList.get(position).getName().trim()); holder.size.setText(CommonUtil.format(searchAppList.get(position).getApkSize() / (float) 1024) + "M"); AppStatistics statistics = searchAppList.get(position).getAppStatistics(); if (statistics != null) { holder.count.setText(statistics.getDownloadCount() + "次"); } holder.ratingBar.setRating(searchAppList.get(position).getAveccore() / 2f); return convertView; }
下面我做出了修改,如果当前图片是之前的图片,则不会调用ImageLoader,否则调用ImageLoader。
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item_app_wall2, parent, false); holder = new ViewHolder(); holder.icon = (ImageView) convertView.findViewById(R.id.app_icon); holder.name = (MarqueeText) convertView.findViewById(R.id.app_name); // holder.grade = (ImageView) // convertView.findViewById(R.id.grade); holder.size = (TextView) convertView.findViewById(R.id.app_size); holder.count = (TextView) convertView.findViewById(R.id.app_count); holder.ratingBar = (RatingBar) convertView.findViewById(R.id.grade); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (searchAppList.get(position).getHttpIco().equals(holder.icon.getTag())) { } else { // 如果不相同,就加载。现在在这里来改变闪烁的情况 ImageLoader.getInstance().displayImage(searchAppList.get(position).getHttpIco(), holder.icon, DisplayImageOptionUtil.getInstance().getOptions()); holder.icon.setTag(searchAppList.get(position).getHttpIco()); } holder.name.setText(searchAppList.get(position).getName().trim()); holder.size.setText(CommonUtil.format(searchAppList.get(position).getApkSize() / (float)1024) + "M"); AppStatistics statistics = searchAppList.get(position).getAppStatistics(); if (statistics != null) { holder.count.setText(statistics.getDownloadCount() + "次"); } holder.ratingBar.setRating(searchAppList.get(position).getAveccore() / 2f); return convertView; }
通过ImageView.getTag和setTag方法来,判定当前图片是否是之前的,如果是之前,则不会刷新图片,如果不是,再刷新。
相关文章推荐
- iOSCoreAnimation动画系列教程
- OFBiz解读之权限设计
- JSP页面问题
- linux命令-sudo普通用户拥有root权限
- C++运算符优先级
- 图像质量评价指标--大全
- sql server 更新存储过程 失败
- itext document table
- Linux命令每天必学(55)之traceroute命令
- OC-常见错误 方法与函数的区别
- 关于.NET弹出窗口提示/MD5加密
- android代码截屏截切图片并且保存到指定文件夹中
- 主键与聚集索引
- 实例详细说明linux下去除重复行命令uniq
- 安卓5.1浏览器设置默认搜索引擎为百度
- iOS 把格式化的JSON字符串转换成字典
- VS2013下OpenCV249的配置
- 倒水问题
- Java for Web学习笔记(三):Servlet(1)Maven
- 同、异步,阻、非阻塞,生命周期相关问题