2011-02-10 42 views
0

我有一个包含几个listviews的应用程序。列表视图包含由图像视图和文字视图组成的项目。Android ListView在通过互联网加载时混合图像

所有图像是用于加载它们的服务器和图案上的缩略图尺寸是这样的:

  • 实例化一个DrawableManager
  • 在getView方法i执行以下 1)通拇指URI和ImageView实例到drawablemanagers getImageAsync方法 1.2)如果图像存在,该方法将首先在SD卡上查看,如果从SD卡加载并保存softreference +更新imageview可绘制 1.2)如果sd上不存在。从HTTP获取并保存在SD(如果有足够的空间)作为softreference并更新imageview可绘制。

当SD卡上的图像存在时,一切正常。但是第一次(或者在没有SD卡的情况下使用该应用程序时)图像似乎会在滚动时填充到错误的列表视图行中。当我停止滚动问题修复后几秒钟自我。

它几乎就像是如果ImageView引用汇集或什么的。

任何想法?

我还包括getView方法:

public View getView(int position, View convertView, ViewGroup parent) { 
        ViewHolder vh; 
        if (convertView == null) { 
         convertView = inflater.inflate(R.layout.informationrow, null); 
         vh = new ViewHolder(); 
         vh.imageView = (ImageView) convertView.findViewById(R.id.rowInformationIcon); 
         vh.textView = (TextView) convertView.findViewById(R.id.rowInformationTitleLine); 
         convertView.setTag(vh); 
        } 
        else 
        { 
         vh = (ViewHolder) convertView.getTag(); 
        } 

        CustomCategory cc = items.get(position); 
        if (cc != null) { 
         vh.textView.setText(cc.get_name()); 
         if (cc.getMediaUrl() != null) { 
          _drawMgr.fetchDrawableOnThread(cc.getMediaUrl(), vh.imageView); 
          vh.imageView.setBackgroundDrawable(getResources().getDrawable(R.drawable.imageframe)); 
         } 
         else { 
          vh.imageView.setImageDrawable(getResources().getDrawable(R.drawable.trans4040)); 
          vh.imageView.setBackgroundDrawable(null); 
         } 
        } 

        return convertView; 
      } 

谢谢!

回答

0

我读了一些说你总是需要在列表中的每个视图中设置一些东西,即使它是空的。因此,也许,如果你之前

_drawMgr.fetchDrawableOnThread(cc.getMediaUrl(), vh.imageView);

可能解决您的问题添加

vh.imageView.setImageDrawable(null); 

。只是一个猜测。