Android实现ListView异步加载图片的方法

2019-12-10 20:00:59于海丽
  • private AsyncImageLoader asyncImageLoader;  public ImageAndTextListAdapter(Activity activity, List<ImageAndText> imageAndTexts, ListView listView) { 
  • super(activity, 0, imageAndTexts);  this.listView = listView; 
  • asyncImageLoader = new AsyncImageLoader();  } 
  • public View getView(int position, View convertView, ViewGroup parent) {  Activity activity = (Activity) getContext(); 
  • // Inflate the views from XML  View rowView = convertView; 
  • ViewCache viewCache;  if (rowView == null) { 
  • LayoutInflater inflater = activity.getLayoutInflater();  rowView = inflater.inflate(R.layout.image_and_text_row, null); 
  • viewCache = new ViewCache(rowView);  rowView.setTag(viewCache); 
  • } else {  viewCache = (ViewCache) rowView.getTag(); 
  • }  ImageAndText imageAndText = getItem(position); 
  • // Load the image and set it on the ImageView  String imageUrl = imageAndText.getImageUrl(); 
  • ImageView imageView = viewCache.getImageView();  imageView.setTag(imageUrl); 
  • Drawable cachedImage = asyncImageLoader.loadDrawable(imageUrl, new ImageCallback() {  public void imageLoaded(Drawable imageDrawable, String imageUrl) { 
  • ImageView imageViewByTag = (ImageView) listView.findViewWithTag(imageUrl);  if (imageViewByTag != null) { 
  • imageViewByTag.setImageDrawable(imageDrawable);  } 
  • }  }); 
  • if (cachedImage == null) {  imageView.setImageResource(R.drawable.default_image); 
  • }else{  imageView.setImageDrawable(cachedImage); 
  • }  // Set the text on the TextView 
  • TextView textView = viewCache.getTextView();  textView.setText(imageAndText.getText()); 
  • return rowView;  }