Android ListView在通过互联网加载时混合图像

时间:2011-02-10 12:48:30

标签: java android asynchronous imageview listactivity

我有一个包含几个列表视图的应用程序。列表视图包含由图像视图和文本视图组成的项目。

所有图像都在服务器上缩放尺寸,用于加载它们的图案如下:

  • Instanciate a DrawableManager
  • 在getView方法中,我执行以下操作 1)将thumb uri和ImageView实例传递给drawablemanagers getImageAsync方法 1.2)如果图像存在,该方法将首先查看SD卡如果是这样从SD卡加载它并保存软参考+更新imageview drawable 1.2)如果不存在于sd。从HTTP获取并保存在SD上(如果有足够的空间)作为软参考并更新imageview drawable。

当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;
            }

谢谢!

1 个答案:

答案 0 :(得分:0)

我读过一些内容,说你总是需要在列表中的每个视图中设置一些内容,即使它是null。所以也许你可以添加

vh.imageView.setImageDrawable(null);

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

可能会解决您的问题。只是一个猜测。