2010-07-05 3 views
5

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

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

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; 
    } 
} 

ответ

8

Вы можете использовать мой пример кода в качестве ссылки Lazy load of images in ListView

+0

О, это действительно полезно! Спасибо тебе за это. Я проверю это сразу. – thpoul

+0

Ваш код работает очень хорошо, когда я запускаю его на компиляторе и выполняю именно то, для чего я стремлюсь. К сожалению. Я не могу реализовать его в моем проекте rss-ридера. Я бы очень признателен за это. Заранее спасибо. – thpoul

+0

Вы можете использовать LazyAdapter как есть. Просто передайте массив URL-адресов. И укажите R.layout.rsslist в getView R.layout.item. Должно работать после этого. – Fedor

0

О решении было бы заполнить переменную класса в пределах вашего адаптера, скажем, 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. Он будет загружать по одному в фоновом режиме, пока ваш gui все равно ответит.

+0

Спасибо, что нашли время ответить! Я уже пробовал это, но я должен делать что-то неправильно или что-то не хватает, и я не смог его реализовать. – thpoul

1

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

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

некоторые особенности этой библиотеки

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

+0

Добро пожаловать в переполнение стека. Подведите итог ссылки в своем ответе; Таким образом, если ссылка устареет, ответ не будет полностью бесполезным. – michaelb958

+0

Спасибо, человек! Извини за это. – alexandreferreira

Смежные вопросы