您的位置:首页 > 其它

自定义ListView滚动时,图片显示错乱

2016-03-18 16:37 411 查看
为了实现ListView的每个条目的自定义布局,我们一般使用继承了BaseAdaper的适配器,然后在getView方法中设置我们的每个条目。但是今天遇到了条目中图片加载混乱的现象。代码如下

public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
final ViewHolder viewHolder;
Note node=list.get(arg0);
System.out.println(arg0);
if (null == arg1)
{
viewHolder = new ViewHolder();
LayoutInflater mInflater = LayoutInflater.from(mContext);
arg1 = mInflater.inflate(R.layout.list_item, null);
arg1.setLayoutParams(new LinearLayout.LayoutParams(screenWidth,screenHeight/6));
viewHolder.label = (TextView) arg1.findViewById(R.id.item_label);
viewHolder.time = (TextView) arg1.findViewById(R.id.item_time);
viewHolder.content = (TextView) arg1.findViewById(R.id.item_content);
viewHolder.image = (ImageView) arg1.findViewById(R.id.item_image);
arg1.setTag(viewHolder);
}
else
{
viewHolder = (ViewHolder) arg1.getTag();
}
viewHolder.label.setText(node.getTitle());
viewHolder.time.setText(node.getTime());
viewHolder.content.setText(node.getContent());
if(node.getPicPath()!=null){
viewHolder.image.setImageBitmap(BitmapUtils.zoomImage(BitmapFactory.decodeFile(node.getPicPath()),screenWidth/4,screenHeight/6.5));
}
return arg1;
}
private static class ViewHolder
{
TextView label;
TextView time;
TextView content;
ImageView image;
} 这里为了提高效率重用了ListView的item,问题就出在这个地方,假如我们的屏幕一开始的时候有5个item,并占满了屏幕,系统会为每个item创建一个view。
当我们继续向下滚动到第6个item的时候,如果第一个item滚动出了屏幕,系统会重用第一个item的view(代码中的arg1),这时候我们通过获得arg1的ViewHolder对象来重用该view中的的组件,然后重新设置每个组件中的内容。但是如果item1有图片,而item6没有图片,根据代码,此时的imageView组件不执行动作,但是因为是重用了item1的缘故,此时的imageView任然将留有第一个item的图片。同理,如果向上滚动,上面的item本来没有图片的,往往会加载到底部的图片。此处代码改为

if(node.getPicPath()!=null){
viewHolder.image.setImageBitmap(BitmapUtils.zoomImage(BitmapFactory.decodeFile(node.getPicPath()),screenWidth/4,screenHeight/6.5));
}else{
viewHolder.image.setImageBitmap(null);
}
return arg1;
在做网络应用的时候,图片往往是异步加载的,这个时候往往容易出现错误,可以参考https://github.com/lesliebeijing/AsyncImageLoaderhttps://github.com/lesliebeijing/VolleyListViewImageDemo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: