Динамическое обновление изображений с URL-адреса с Android

Итак, у меня есть программа, которая захватывает RSS-канал по адресу http://www.muttville.org/mutts/feed и отображает список доступных собак, в основном заполняя каждый элемент в ListView изображением собаки слева и заголовком о собаке справа.

Мое приложение отлично выполняет, захватывает и анализирует XML-канал. onCreate сохраняет URL-адрес изображения в виде строки в каждом элементе. У меня есть структура данных RSSFeed, которая представляет собой массив объектов RSSItem. Проблема заключается в том, чтобы выяснить, как обновлять изображения асинхронно.

У меня есть imageDownloader, который я на самом деле получил из блога разработчиков Android в Google, который обновляет изображения и сохраняет их, но предварительная загрузка очень длинная. Я бы предпочел немедленно начать отображать элементы и обновлять изображения по мере их получения. Раздражает то, что список поначалу прокручивается действительно без ответа, вызывая мой imageDownloader для повторного извлечения элементов. Есть ли способ заставить ImageViews просто захватить указатель на объект ImageView в RSSItem, а затем просто обновить его?

Я новичок в разработке для Android, поэтому есть большая вероятность, что я не понимаю чего-то базового. Вот мой код адаптера:

частный класс FeedItemAdapter расширяет ArrayAdapter {

    private List<RSSItem> items;

    public FeedItemAdapter(Context context, int textViewResourceId, List<RSSItem> items) {
        super(context, textViewResourceId, items);
            this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = 
                    (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.displayitem, null);
            }

            RSSItem o = items.get(position);
            if (o != null) {
                    ImageView tt = (ImageView) v.findViewById(R.id.leftimage);
                    TextView bt = (TextView) v.findViewById(R.id.righttext);
                    if (tt != null) {   
                        //get image from url string
                        imageDownloader.download(o.getImageString(), tt);
                    }
                    if(bt != null){
                          bt.setText(feed.getItem(position).getTitle());
                    }
            }
            return v;
    }


}

person BrianS    schedule 17.08.2010    source источник


Ответы (1)


Создайте новый класс, который наследует ImageView, покажите «ожидающее» изображение по умолчанию и добавьте функцию, которая начинает загрузку из сети в другом потоке. Когда все будет готово, обновите образ.

person Jess    schedule 17.08.2010