有ViewHolder滚动一个ListView,当图像被打乱 [英] Images were Shuffled when scrolling a ListView with a ViewHolder

查看:126
本文介绍了有ViewHolder滚动一个ListView,当图像被打乱的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题是连接当用户滚动ListView控件。我环顾四周,看到列表视图懒形象的例子不胜枚举,还观看了谷歌IO视频其中谈到的好的做法,使这项工作。但我的问题仍然存在,当用户移动上下的ListView。

什么情况是,滚动列表时,即是在每个项目上加载图像洗牌,并且每个项目要到下一个项目的化身结束。我不知道如果我是清楚的,但我会用图像显示。

当您启动,有没有留下任何与标准图像的图像项。

图片1: http://boxandroid.com/app/weguide/itsok.png 在用户滚动ListView控件: http://boxandroid.com/app/weguide/nook.png

请注意,该图片被打乱其他项目中。

在我的适配器:

 公开查看getView(INT位置,查看convertView,ViewGroup中父){

    ViewHolder viewHolder =新ViewHolder();
    如果(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);
    }其他{
        viewHolder =(ViewHolder)convertView.getTag();
    }

    HashMap的<字符串,字符串>项目=(HashMap的<字符串,字符串>)的getItem(位置);

    viewHolder.text.setText(item.get(poiName)的toString());
    viewHolder.owner.setText(item.get(业主)的toString());

    ImageView的ImageView的= viewHolder.image;
    imageView.setTag(item.get(好));

    如果(!item.get(好)。等于(空)){
        可绘制cacheImage = loader.loadDrawable(item.get(好),新ImageManage.ImageCallback(){
            公共无效imageLoaded(可绘制imageDrawable,串IMAGEURL){
                ImageView的imageViewByTag =(ImageView的)_listView.findViewWithTag(IMAGEURL);
                如果(imageViewByTag!= NULL)
                    imageViewByTag.setBackgroundDrawable(imageDrawable);
            }
        });
        imageView.setImageDrawable(cacheImage);
        notifyDataSetChanged();
    }

    返回convertView;
}
 

解决方案

作为基础的例子在Android上的博客。

http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html

 公开查看getView(INT位置,查看convertView,ViewGroup中父){

    ViewHolder viewHolder =新ViewHolder();
    如果(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);
    }其他{
        viewHolder =(ViewHolder)convertView.getTag();
    }

    HashMap的<字符串,字符串>项目=(HashMap的<字符串,字符串>)的getItem(位置);

    viewHolder.text.setText(item.get(poiName)的toString());
    viewHolder.owner.setText(item.get(业主)的toString());
    viewHolder.image.setTag(item.get(好));
    imageDowload.download(item.get(好),viewHolder.image);


    返回convertView;
}
 

现在的工作,谢谢。

My problem is connected when the user scrolls the ListView. I looked around and saw numerous examples of 'listview lazy image', has also watched the video of the Google IO which speaks of 'good practice ' to make this work. But my problem continues when the user moves up and down the ListView.

What happens is that when scrolling the list, the images that were loaded on each item are shuffled, and the avatar of each item going to the next item ends. I do not know if I'm being clear but I will show with the image.

When you start, items that have no image left with the standard image.

Image 1: http://boxandroid.com/app/weguide/itsok.png Before user scroll ListView: http://boxandroid.com/app/weguide/nook.png

Note that the pictures were shuffled among other items.

in my adapter:

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"));

    if(!item.get("thumbs").equals("null")){
        Drawable cacheImage = loader.loadDrawable(item.get("thumbs"), new ImageManage.ImageCallback() {
            public void imageLoaded(Drawable imageDrawable, String imageUrl) {
                ImageView imageViewByTag = (ImageView) _listView.findViewWithTag(imageUrl);
                if(imageViewByTag != null)
                    imageViewByTag.setBackgroundDrawable(imageDrawable);
            }
        });
        imageView.setImageDrawable(cacheImage);
        notifyDataSetChanged();
    }

    return convertView;
}

解决方案

Used as base the example on the blog of Android.

http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html

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() );
    viewHolder.image.setTag(item.get("thumbs"));
    imageDowload.download(item.get("thumbs"), viewHolder.image);


    return convertView;
}

is now working, thanks.

这篇关于有ViewHolder滚动一个ListView,当图像被打乱的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆