Как показать экран в MainScreen в приложении
Мое приложение имеет один экран ниже детали этого. Экранное имя EventList. Этот экран разработан полностью. Есть два ButtonField
Next
а также Previous
, На дне этих двух Button
ListField
находится на этом экране.
Когда я нажимаю на Next
или же Previous
мой ListField
будет обновлять. Он успешно обновлен с помощью updateListField() method
который создан на этом экране. Все работает нормально до этого. Но меня беспокоит то, что когда я нажимаю на эти Button
ListField
потребуется время (около 3 или 4 секунды) для обновления новых данных. Во время обновления данных в фоновом режиме я хочу показать Massage
лайк Please wait.../Loading...
, Как я могу показать это без использования PopupScreen
,
Я попробовал приведенный ниже код, но не работает должным образом.
VerticalFieldManager manager = new VerticalFieldManager();
manager.add(new LabelField("Please Wait..."));
Screen popup = new PopupScreen(manager);
Если я сделаю это, используя PopupScreen
моя полная логика будет изменена для этого экрана, и это займет много времени.
Пожалуйста, предложите мне, как мы можем добавить FieldManager
на существующих MainScreen
,
Заранее спасибо!!!
2 ответа
Application.getApplication().invokeLater(
new Runnable() {
public void run() {
GIFEncodedImage image;
EncodedImage encodedImage = EncodedImage
.getEncodedImageResource("spiral.gif");
byte data[] = new byte[3000];
data = encodedImage.getData();
image = (GIFEncodedImage) EncodedImage
.createEncodedImage(
data, 0,
data.length);
AnimatedGIFField animatedGIF = new AnimatedGIFField(
image);
PopupScreen popup = new PopupScreen(
new VerticalFieldManager());
popup.add(animatedGIF);
Border border = BorderFactory
.createSimpleBorder(
new XYEdges(),
Border.STYLE_SOLID);
popup.setBorder(border);
UiApplication
.getUiApplication()
.pushScreen(popup);
Timer timer = new Timer();
timer.schedule(new CountDown(),
3000);
}
});
Класс MainScreen включает поле состояния, которое вы можете использовать для этого. В ваш класс, расширяющий MainScreen, добавьте:
setStatus(new LabelField("Please wait..."));
чтобы удалить этот статус:
setStatus(null);
Однако вам нужно сделать это в потоке событий, а затем вернуться, чтобы ОС могла обновить пользовательский интерфейс. Если вы выполняете обновление списка в потоке событий (потоке, который будет вызывать ваш код при нажатии кнопки), вы должны выполнить эту работу в отдельном потоке и использовать UiApplication.invokeLater() или удерживать блокировку события, чтобы выполнять обновления в пользовательском интерфейсе.