Асинхронный загрузчик изображений в списке [Android] - PullRequest
5 голосов
/ 05 июля 2010

У меня проблемы с реализацией асинхронного загрузчика изображений для следующего кода. Я читал некоторые посты в Интернете об этом, и мне кажется, что я понимаю логику, стоящую за этим, но, похоже, мне не удалось его реализовать.

Код ниже - то, что я использую, чтобы просто загрузить изображения в моем списке просмотра.

public class MyCustomAdapter extends ArrayAdapter<RSSItem> {
   Bitmap bm;

   public MyCustomAdapter(Context context, int textViewResourceId, List<RSSItem> list) {
      super(context, textViewResourceId, list); 
   }

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
      // TODO Auto-generated method stub
      BitmapFactory.Options bmOptions;
      bmOptions = new BitmapFactory.Options();
      bmOptions.inSampleSize = 1;
      bm = LoadImage(myRssFeed.getList().get(position).getDescription(), bmOptions);

      View row = convertView;

      if(row == null) {
         LayoutInflater inflater = getLayoutInflater();
         row = inflater.inflate(R.layout.rsslist, parent, false); 
      }

      TextView listTitle = (TextView)row.findViewById(R.id.listtitle);
      listTitle.setText(myRssFeed.getList().get(position).getTitle());
      ImageView listDescription = (ImageView)row.findViewById(R.id.listdescription);
      listDescription.setImageBitmap(bm);
      TextView listPubdate = (TextView)row.findViewById(R.id.listpubdate);
      listPubdate.setText(myRssFeed.getList().get(position).getPubdate());

      return row;
   }
}

Ответы [ 3 ]

8 голосов
/ 05 июля 2010

Вы можете использовать мой пример кода в качестве ссылки Ленивая загрузка изображений в ListView

1 голос
/ 27 июля 2013

Вы смотрели SmartImageView? http://loopj.com/android-smart-image-view/

Это очень простая библиотека для асинхронной загрузки изображений (:

некоторые функции этой библиотеки

Вставная замена для ImageView Загрузить изображения с URL Загрузка изображений из адресной книги телефона Асинхронная загрузка изображений, загрузка происходит вне потока пользовательского интерфейса Изображения кешируются в память и на диск для супер быстрой загрузки Класс SmartImage легко расширяется для загрузки из других источников

0 голосов
/ 05 июля 2010

Решением будет заполнение переменной класса в вашем адаптере, скажем, ArrayList со ссылками на все «ImageView listDescription»

ArrayList<ImageView> allImageViews = new ArrayList<ImageView>();    
    ...

    public View getView(int position, View convertView, ViewGroup parent){
       ...
       ImageView listDescription=(ImageView)row.findViewById(R.id.listdescription);
       allImageViews.add(listDescription);
       ...
    }

    private class ImageDownLoader extends AsyncTask<ArrayList, Void, Void>{
       doInBackground(){
         for(ImageView imageView: allImageViews){
         BitmapFactory.Options bmOptions;
         bmOptions = new BitmapFactory.Options();
         bmOptions.inSampleSize = 1;
         bm = LoadImage(imageNameOrWhatever, bmOptions);
         imageView.setImageBitmap(bm);
       } 
    }

Затем используйте AsyncTask, который проходит через каждый ImageView, получает соответствующее изображение и удаляет ImageView из ArrayList. Он будет загружаться по одному в фоновом режиме, пока ваш графический интерфейс все равно будет отвечать.

...