有ViewHolder滚动一个ListView,当图像被打乱图像、ViewHolder、ListView

2023-09-04 23:38:30 作者:姑娘我娶你

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

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

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

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

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

VB 高手看一下 listview

在我的适配器:

 公开查看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.