如何在应用程序中的MainScreen中显示屏幕

时间:2012-02-05 12:35:04

标签: blackberry screen fieldmanager mainscreen

我的应用程序在其详细信息下面有一个屏幕。屏幕名称 EventList 。这个屏幕设计完整。有两个ButtonField NextPrevious。在这两个Button ListField的底部放置在此屏幕中。

当我点击NextPrevious时,我的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 个答案:

答案 0 :(得分:1)

MainScreen类包含一个可用于此的状态字段。在您的类中扩展MainScreen添加:

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

删除该状态:

setStatus(null);

但是,您需要在事件线程上执行此操作然后返回,以便操作系统可以更新用户界面。如果您正在事件线程(按下按钮时将调用代码的线程)执行列表更新,那么您应该在一个特殊线程上执行该工作并使用UiApplication.invokeLater()或保持事件锁定在用户界面上执行更新。

答案 1 :(得分:0)

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); 

} 
});