Как обновить поля во время активности внутри цикла? - PullRequest
1 голос
/ 10 ноября 2010

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

У меня есть VerticalFieldManager, и к нему я добавляю5 HorizontalFieldManager с.Когда я загружаю каждое изображение (используя HttpConnection), я конвертирую его в Bitmap, затем помещаю в BitmapField, затем добавляю поле к одному из HorizontalFieldManager s.

Это работает,за исключением того, что я не вижу ни одного изображения до тех пор, пока все 25 не будут загружены, и в этот момент я вижу их все.

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

Ответы [ 2 ]

2 голосов
/ 11 ноября 2010

1) Вы должны загрузить и создать BitmapField в отдельном (не-пользовательском интерфейсе) Thread.

2) Если у вас есть BitmapField для добавления, сделайте что-то вроде этого:

final BitmapField b = ... // your code to get the BitmapField
UiApplication.getUiApplication().invokeAndWait(new Runnable() {
    public void run() {
        yourContainer.add(b);
        yourContainer.invalidate(); // may not need this - try comment out
    }
});
2 голосов
/ 10 ноября 2010

Вы делаете загрузку из потока событий пользовательского интерфейса?Если нет, загрузка заблокирует все обновления пользовательского интерфейса до завершения, что объясняет поведение, которое вы видите.

редактирование на основе новой информации в комментарии:

HttpConnection блокируется, поэтому необходимо выполнить операцию ввода-вывода в потоке внеПользовательский интерфейсВаше приложение загружает изображения достаточно быстро, чтобы блокировка потока пользовательского интерфейса не убивала все приложение.При медленном соединении ваше приложение будет убито ОС при выполнении этих загрузок.

Этот интерфейс выполняет блокировку операций ввода и вывода.Приложение будет заблокировано, если реализация этого интерфейса откроет соединение из основного потока событий.Предотвратите блокировку приложения, открыв соединение из потока, который отделен от потока основного события.См. Соединитель для получения дополнительной информации.

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