android开发之viewHolder处理listView滑动

  次阅读 作者:智能小宝 来源:互联网 2015-12-04 16:38 我要评论(0)

在没有用viewHolder的情况下,listView表现效率低下。如果加载的数量过多则会一点点的消耗内存,直到抛出oom。开始异步加载图片会出现图片错位的问题,后来查阅资料将holder里边的图片地址和图片一一对应起来,在异步加载的回调函数中将其替换回来。

holder.thumb_image.setTag(hotel.getHotelTitlePic());//避免图标错位,在异步加载成功后替换回来

ImageView imageView = (ImageView) listView.findViewWithTag(imageUrl);

if(imageView != null){

imageView.setImageDrawable(imageDrawable);

imageView.setTag("");

}

以上关键代码解决图片错位问题。

下面是getView()方法

public View getView(int position, View rowView, ViewGroup parent){

final MHotelInfo hotel = this.getItem(position);

if (rowView == null) {

holder = new ViewHolder();

LayoutInflater inflater = ((Activity) this.getContext())

.getLayoutInflater();

rowView = inflater.inflate(R.layout.hotel_item_view, null);

holder.typeName = (TextView) rowView.findViewById(R.id.hotelType);

holder.thumb_image=(ImageView)rowView.findViewById(R.id.img);// 缩略图

holder.distance = (TextView) rowView.findViewById(R.id.distance);

rowView.setTag(holder);

}else{

holder = (ViewHolder) rowView.getTag();

}

// 设置ListView的相关值

holder.thumb_image.setTag(hotel.getHotelTitlePic());//避免图标错位,在异步加载成功后替换回来

holder.typeName.setText(hotel.getTypeName());

if(null == hotel.getHotelTitlePic() || hotel.getHotelTitlePic().equals("")){//如果没有图标就显示默认图标

holder.thumb_image.setImageResource(R.drawable.downloadfalse);

}else{

//异步加载图片

imageLoader.loadDrawable(hotel.getHotelTitlePic(), new ImageCallback() {

public void imageLoaded(Drawable imageDrawable, String imageUrl) {

ImageView imageView = (ImageView) listView.findViewWithTag(imageUrl);

if(imageView != null){

imageView.setImageDrawable(imageDrawable);

imageView.setTag("");

}

}

});

}

return rowView;

}

static class ViewHolder {

TextView typeName;

ImageView thumb_image;

}

但是ViewHolder为什么是被设计成static类型的,本人一直没弄清楚。在网上找了些资料但是一直没能看到一个能说服我的理由。又说节省内存,保持对象的唯一性,还有说保持图片不错乱但是个人感觉都不怎么靠谱。今天我试了下将static去掉照常运行没感觉和以前有什么区别。后来我查了下 static类的一些特性,首先ViewHolder是一个内部类若是static类的话则不需要依赖外部类的对象。也就是说只有static的内部类的成员变量才可以被声明成static类型,若内部类不是static类型的则不可以声明静态成员变量

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...