Вопрос

Я рассмотрел несколько сообщений о ленивом загрузке, но я считаю, что моя проблема немного отличается.

У меня есть галерея (мой класс расширяет галерею), которая отображает 20 довольно больших по размерам изображения (400-500К каждый). Я не могу загрузить их все в галерее, так как я получаю исключение на неодобрении.
Итак, я создал массив из 20 рисунков и изначально заполнил первые 9 элементов (изображения поступают из сети) и устанавливают все остальные в NULL. Мое намерение было: на брошении справа, извлечь элемент нет. 10 и установить нулевой элемент №. 0. На другом брошении вправо извлечь элемент нет. 11 и установить нулевой элемент №. 1 до null. Та же логика на броске влево.

Проблема в том, что я могу бросать гораздо быстрее, чем элементы извлечены. Моя галерея имеет басдер и его GetView () выглядит что-то подобное:

Public View GetView (SINT Position, View ConvertView, ReviewSrup Remote) {ImageView ImageView = NEW ImageView (); ImageView.SetDrawable (ImageArray [Position]; .... .... Обратитесь обратный imageView;}

Как сказать GetView () - если imageAray [Position] по-прежнему NULL, показать диалоговое окно «Загрузка ...», и как только он настроен, повторите себя с той же позицией?
Я не хочу видеть imageView пустое, а затем установить на лету. Я не могу видеть ImageView вообще, пока он не будет установлен.

Спасибо.

Это было полезно?

Решение

Галерея предназначена для плавного опыта. Это будет очень плохое интернет-интерфейс, если вы блокируете экран и не переключаетесь на следующее изображение, пока он не будет получен. Таким образом, пользователь не сможет вообще бросать. Вы должны отобразить какой-то индикатор загрузки вместо изображения, пока он загружается.

Я думаю, что ваш сценарий довольно распространен. Вы должны скачать изображения и отображать их. Если вы получите OutOfMemory, вы можете попробовать суперсбрасывать изображения Странно из проблемы памяти при загрузке изображения в растровый объект.

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

Вы можете взглянуть на мой код образца Ленивая загрузка изображений в ListView. Отказ На самом деле это адаптер ListView, но вы можете применить его в галерею с незначительными модификациями. Я думаю, что это сделает именно то, что вам нужно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top