我正在使用List视图来显示android文件,即显示来自服务器的文件夹和文件。
当我开始我的活动时,我可以在屏幕上看到列表,就像我想要的那样。 我从服务器获取数据。 我想显示像
这样的结构当有图像文件需要显示图像缩略图时(我有从服务器获取的缩略图URL默认图像加载器显示默认图像图标,直到缩略图不可用)。
当有其他文件类型如音频,视频.....或文件需要显示该图标时。
当我显示列表时,它会显示相关文件的正确图标。 但是当我尝试开始滚动和在后台我的缩略图从服务器加载时,当从服务器我从服务器获取图像并显示该位图缩略图时,它将在其他文件类型中显示缩略图位图,如文件夹或音乐文件图标由于查看listview的重用。 从服务器获取图像时会发生这种错位。
任何人都可以建议我如何克服这个问题。 下面是我的listview的getview()方法。
public View getView(int position,View convertView,ViewGroup parent){
ViewHolder viewHolder = new ViewHolder();
if(convertView == null){
convertView = _inflate.inflate(R.layout.layout_list, null);
viewHolder.text = (TextView) convertView.findViewById(R.id.title);
viewHolder.owner = (TextView) convertView.findViewById(R.id.owner);
viewHolder.image = (ImageView) convertView.findViewById(R.id.thumb);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
HashMap<String, String> item = (HashMap<String, String>) getItem(position);
viewHolder.text.setText( item.get("poiName").toString() );
viewHolder.owner.setText( item.get("owner").toString() );
ImageView imageView = viewHolder.image;
imageView.setTag(item.get("thumbs"));
//Is type of file is picture then display thumbnail by using imagloader class
if (genericDAO.sub_content_type.equalsIgnoreCase(Constants.TYPE_PICTURE))
{
String url = getTumbnalURL();
viewHolder.image.setTag(genericDAO.id);
viewHolder.image.setScaleType(ScaleType.CENTER_CROP);
mImageLoader.DisplayImage(id, url, mActivity,viewHolder.image);
}
else
{
//Display related file icon
viewHolder.image.setImageResource(FileUtil.getImageRelatedToFileType(mcontext, sub_ext));
}
return convertView;
}
答案 0 :(得分:0)
虽然此代码不足。我从这段代码中理解的是,你正在使用延迟加载图像, mImageLoader 必须运行线程,这是将图像设置为 viewHolder 。 你也可以将imageInfo设置为else部分中的标记。
...
否则 {
//Display related file icon
viewHolder.image.setImageResource(FileUtil.getImageRelatedToFileType(mcontext, sub_ext));
viewHolder.image.setTag(genericDAO.id);
}
在ImageLoader内部,下载新图像时,在将新图像设置为viewHolder之前,请检查标记是否正确。