Асинктаск в листе - PullRequest
       2

Асинктаск в листе

1 голос
/ 17 мая 2011

У меня есть листинг, и в каждой строке есть свое изображение, которое я загружаю из Интернета, и какой-то текст.Я хотел бы реализовать asynctask, чтобы изображения загружались на заднем плане.Я искал много учебных пособий, но не нашел ни одного, в котором бы использовались разные изображения в строке.Проблема заключается в методе doInBackground, который должен загружать изображения из Интернета.Но поскольку все они разные и зависят от своей строки, как поток может их загрузить?

Глобальные переменные: Bitmap bm;BitmapFactory.Options bmOptions;

В моем методе getView у меня есть

ImageView img = (ImageView) v.findViewById (R.id.icon);if (img! = null) {bm = LoadImage (o.getLink (), bmOptions);img.setImageBitmap (шм);}

вместе с загрузкой текста ... этот img должен быть загружен в метод doInBackground, но тогда у меня не будет доступа к объекту o (типа User), который я знаю, потому что getView дает мнеposition.

Кто-нибудь знает, как решить эту проблему?

Спасибо, Рита

Ответы [ 3 ]

2 голосов
/ 17 мая 2011

Есть два способа сделать это: простой или скучный.

Если вы можете добавить дополнительные зависимости, то я бы настоятельно рекомендовал бы вам воспользоваться простым маршрутом и использовать GreedDroid .Вы можете использовать структуру элементов, которая у них там, или использовать AsyncImageView .Лично я бы использовал последнее.

С другой стороны, скучным способом было бы отключить HttpClient и загрузить изображение вручную, а затем использовать метод BitmapFactory.decodeStream для создания Bitmap.

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

К сожалению, во многих реализациях ExecutorService, который выполняет AsyncTasks, ограничен использованием одного Thread.Это вызывает неприятное ощущение в Списке, где изображения загружаются одно за другим, а не как можно больше ощущений, которые вы можете ожидать.

В этом случаевы, вероятно, захотите (по сути) бросить свой собственный AsyncTask.

Я не большой поклонник AsyncTask с, как вы можете сказать.

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

0 голосов
/ 17 мая 2011

Здесь изображения будут загружаться с помощью асинхронной задачи. http://developer.android.com/resources/articles/painless-threading.html

0 голосов
/ 17 мая 2011

Полагаю, вам нужно написать свой собственный адаптер списка, чтобы по мере того, как отображалось все больше и больше элементов списка (например, с помощью прокрутки вниз), адаптер создает больше асинхронных задач и отображает изображения после их получения.

http://developer.android.com/reference/android/widget/ListAdapter.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...