从Web加载缩略图图像时,Listview在错误的位置显示错误的图像

时间:2014-05-19 12:16:18

标签: android-listview imageview custom-adapter

我正在使用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;

}

1 个答案:

答案 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之前,请检查标记是否正确。