ListView ImageView加载相同的图片

时间:2014-03-05 15:40:30

标签: android

我的ListViewAdapter存在很大问题。

我的列表视图同时显示2个托管。每个条目都应该从我的服务器获得不同的图片。 第一个和第二个工作正常,但如果我向下滚动,下一个部分会有相同的图片。

我的代码如下:

if (viewHolder.imgPic != null) {
    String strUrl = mainUrl+list.get(position).getUrl();
    new ImageDownload(viewHolder.imgPic).execute(strUrl);
}

我正在检查视图并且正在执行它,如果它是null。

有人能帮助我吗? 感谢

2 个答案:

答案 0 :(得分:1)

根据您的问题,我可以假设您不了解ListView recycling mechanisem

基本上,查看不再可见(在用户滚动远离视线后),它被回收到显示需要显示的新项目。这是convertView方法的getView()参数...

可能你看到相同的图像,因为回收的视图保留了相同的图像..

还存在异步任务(您的ImageDownload类)的问题,当启动请求的原始项目已被回收时,它可以完成它。

我建议你“挖掘”为挖掘器,因为你可以理解所有关于ListView的东西 - 这是最复杂和最重要的UI组件之一。阅读我链接的帖子是一个好的开始。

此视频也非常重要:

http://www.youtube.com/watch?v=wDBM6wVEO70

答案 1 :(得分:0)

这是我的GetView:

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = null;
        if(rowResourceId!=R.layout.search_empty_list) {
            if (convertView == null) {
                LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflator.inflate(rowResourceId, null);
                final ViewHolder viewHolder = new ViewHolder();

                viewHolder.textName = (TextView) view.findViewById(R.id.textView1);
                viewHolder.imgPic = (ImageView) view.findViewById(R.id.imgPic);         

                if (viewHolder.imgPic != null) {
                    String strUrl = mainUrl+list.get(position).getUrl();
                    new ImageDownload(viewHolder.imgPic).execute(strUrl);
                }

                view.setTag(viewHolder);

            } else {
                view = convertView;
            }
            ViewHolder holder = (ViewHolder) view.getTag();

            holder.textName.setText(list.get(position).getName());


        } else {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(rowResourceId, parent, false);

            TextView textView1 = (TextView) view.findViewById(R.id.textView1);
            textView1.setText(list.get(0).getName());
        }
        return view;

    }