как показать экран в MainScreen в приложении - PullRequest
0 голосов
/ 05 февраля 2012

Мое приложение имеет один экран под подробностями этого. Экранное имя 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 ]

1 голос
/ 05 февраля 2012

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

setStatus(new LabelField("Please wait..."));

, чтобы удалить этот статус:

setStatus(null);

Однако вам нужно сделать это в потоке событий, а затем вернуться, чтобы ОС могла обновитьпользовательский интерфейс.Если вы выполняете обновление списка в потоке событий (потоке, который будет вызывать ваш код при нажатии кнопки), вы должны выполнить эту работу в отдельном потоке и использовать UiApplication.invokeLater () или удерживать блокировку события, чтобывыполнять обновления в пользовательском интерфейсе.

0 голосов
/ 06 февраля 2012
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); 

} 
});
...