Caching images and displaying

后端 未结 5 901
臣服心动
臣服心动 2020-11-22 15:37

Hello Am facing a particular problem in which I need to download images and display them onto a ListView corresponding to their particular TextView\'s

5条回答
  •  南笙
    南笙 (楼主)
    2020-11-22 16:00

    Please try this with universal image loader

    public class DetailsListViewAdapter extends ArrayAdapter{
        private Context context;
        private List detailList;
        DisplayImageOptions options;
        public ImageLoader imageLoader;
    
        public DetailsListViewAdapter(Context context, int textViewResourceId,List detailList) {
            super(context, textViewResourceId,detailList);
            this.detailList = detailList;
            this.context = context;
            imageLoader = ImageLoader.getInstance();
            imageLoader.init(ImageLoaderConfiguration.createDefault(context));
            options = new DisplayImageOptions.Builder()
            .showImageForEmptyUri(R.drawable.blankimage)
            .showImageOnFail(R.drawable.blankimage)
            .resetViewBeforeLoading()
            .cacheOnDisc()
            .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .displayer(new FadeInBitmapDisplayer(300))
            .build();
        }
    
        static class ViewHolder{
            private TextView popupDetails;
            private TextView pubDate;
            private ImageView image;
            private ProgressBar progress;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            ViewHolder holder;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.details_list_item, null);
                holder = new ViewHolder();
                holder.popupDetails=(TextView)v.findViewById(R.id.detailHeading);
                holder.pubDate = (TextView)v.findViewById(R.id.pubDate);
                holder.image = (ImageView)v.findViewById(R.id.listImg);
                holder.progress = (ProgressBar)v.findViewById(R.id.progressBar);
                v.setTag(holder);
            } else {
                holder = (ViewHolder) v.getTag();
            }
            Entry value = detailList.get(position);
            holder.popupDetails.setText(value.getTitle());
            holder.pubDate.setText(value.getPubDate());
            String url = value.getImageLink();
            try {
                if(url.length() > 5) {
                    holder.image.setVisibility(View.VISIBLE);
                    loadImage(holder.image,url,holder.progress);
                } else {
                    if(url.equals("NO")) {
                        holder.image.setVisibility(View.INVISIBLE);
                    } else {
                        holder.image.setVisibility(View.GONE);
                    }
                }
            } catch (Exception e) {
                Logger.show(e);
            }
            v.setBackgroundColor(Color.WHITE);
            return v;
    
        }
        public void loadImage(ImageView imageView, String loadURL,final ProgressBar progress) {
            imageLoader.displayImage(loadURL, imageView, options, new SimpleImageLoadingListener() {
                @Override
                public void onLoadingStarted(String imageUri, View view) {
                    progress.setVisibility(View.VISIBLE);
                }
    
                @Override
                public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                    String message = null;
                    switch (failReason) {
                    case IO_ERROR:
                        message = "Input/Output error";
                        break;
                    case OUT_OF_MEMORY:
                        message = "Out Of Memory error";
                        break;
                    case NETWORK_DENIED:
                        message = "Downloads are denied";
                        break;
                    case UNSUPPORTED_URI_SCHEME:
                        message = "Unsupported URI scheme";
                        break;
                    case UNKNOWN:
                        message = "Unknown error";
                        break;
                    }
                    Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onLoadingComplete(final String imageUri, View view, final Bitmap loadedImage) {
                    progress.setVisibility(View.INVISIBLE);
                }  
            });
        }
    }
    

提交回复
热议问题