Android - Issue with lazy loading images into a ListView

后端 未结 4 2000
星月不相逢
星月不相逢 2020-12-29 15:18

This is a very common scenario: displaying images in a ListView which have to be downloaded from the internet.

Right now I have a custom subclass of ArrayAdapter whi

4条回答
  •  长发绾君心
    2020-12-29 15:48

    I used the code in following link : another stackoverflow question

    i made small changes in order to solve recycling view problem.i set the url of image to Tag of imageview in the adapter. Following code contains my solution that solves recycling problem:

    public void fetchDrawableOnThread(final String urlString, final ImageView imageView,Drawable drw) {
    
        imageView.setImageDrawable(drw);//drw is default image
        if (drawableMap.containsKey(urlString)) {
            if(imageView.getTag().toString().equals(urlString))
            {
                imageView.setImageBitmap(drawableMap.get(urlString));
                imageView.invalidate();
                return;
            }
    
        }
    
        final Handler handler = new Handler() {
            @Override
            public void handleMessage(Message message) {
                BitmapWrapper wrapper = (BitmapWrapper)message.obj;
                if(wrapper.imageurl.equals(imageView.getTag().toString()))
                {
                    imageView.setImageBitmap((Bitmap)wrapper.bitmap);
                    imageView.invalidate();
                }
    
            }
        };
    
        Thread thread = new Thread() {
            @Override
            public void run() {
                //TODO : set imageView to a "pending" image
    
                Bitmap drawable = fetchDrawable(urlString);
                BitmapWrapper wrapper = new BitmapWrapper();
                wrapper.bitmap = drawable;
                wrapper.imageurl = urlString;
                Message message = handler.obtainMessage(1, wrapper);
                handler.sendMessage(message);
            }
        };
        thread.start();
    }
    
    
        public class BitmapWrapper
    {
        public Bitmap bitmap;
        public String imageurl;
    }
    

提交回复
热议问题