Как показать экран в MainScreen в приложении

Мое приложение имеет один экран ниже детали этого. Экранное имя EventList. Этот экран разработан полностью. Есть два ButtonFieldNext а также Previous, На дне этих двух ButtonListField находится на этом экране.

Когда я нажимаю на Next или же Previous мой ListField будет обновлять. Он успешно обновлен с помощью updateListField() method который создан на этом экране. Все работает нормально до этого. Но меня беспокоит то, что когда я нажимаю на эти ButtonListField потребуется время (около 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() или удерживать блокировку события, чтобы выполнять обновления в пользовательском интерфейсе.

Другие вопросы по тегам