您的位置 首页 IC

android viewHolder处理listView滑动

在没有用viewHolder的情况下,listView表现效率低下。如果加载的数量过多则会一点点的消耗内存,直到抛出oom。开始异步加载图片会出现图片错位的问题

在没有用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类型的则不能够声明静态成员变量。不知道是不是static内部类的这个特性招引了规划者?假如有谁清楚这个问题还请不吝赐教。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/298048.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部