【问题标题】:Listview display wrong image at wrong place when loading thumbnail image from web从 Web 加载缩略图时,Listview 在错误的位置显示错误的图像
【发布时间】:2014-05-19 12:16:18
【问题描述】:

我正在使用列表视图来显示 android 文件,即显示来自服务器的文件夹和文件。

当我开始我的活动时,我可以在屏幕上看到我想要的列表。 我正在从服务器获取数据。 我想展示像

这样的结构

当有图像文件需要显示图像缩略图时(我有从服务器获取的缩略图 URL,默认图像加载器显示默认图像图标,直到缩略图不可用)。

当有其他文件类型如音频、视频.....或文件需要显示该图标时。

当我显示列表时,它会显示相关文件的正确图标。 但是,当我尝试开始滚动时,在后台我的缩略图正在从服务器加载,当我从服务器获取图像并显示该位图缩略图时,它将以其他文件类型(如文件夹或音乐文件图标)显示缩略图位图由于查看列表视图的复用。 从服务器获取图像时会发生这种错误。

任何人都可以建议我如何克服这个问题。 下面是我的 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;

}

【问题讨论】:

    标签: android-listview imageview custom-adapter


    【解决方案1】:

    虽然这个代码是不够的。我从这段代码中了解到,您正在对图像使用延迟加载,并且 mImageLoader 必须正在运行线程,即将图像设置为 viewHolder。 您也可以在 else 部分将 imageInfo 设置为标签。

    ....

    否则 {

    //Display related file icon
         viewHolder.image.setImageResource(FileUtil.getImageRelatedToFileType(mcontext, sub_ext));
         viewHolder.image.setTag(genericDAO.id);
     }
    

    在 ImageLoader 中,下载新图片时,在将新图片设置为 viewHolder 之前,请检查标签是否正确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2014-10-31
      相关资源
      最近更新 更多