2012-02-05 3 views
0

내 응용 프로그램에는 그 세부 사항 아래에 하나의 화면이 있습니다. 화면 이름 이벤트 목록. 이 화면은 완전히 디자인되었습니다. ButtonFieldNextPrevious 두 개가 있습니다. 이 두 개의 하단에 ButtonListField이이 화면에 배치됩니다.응용 프로그램의 메인 화면 내에서 화면을 표시하는 방법

Next 또는 Previous을 클릭하면 ListField이 업데이트됩니다. 이 화면에서 생성 된 updateListField() method을 사용하여 성공적으로 업데이트됩니다. 모두 이것까지 잘 작동합니다. 하지만 내 관심사는 이러한 데이터를 업데이트 할 때 (약 3 또는 4 초) 시간이 걸릴 것이라고 ButtonListField입니다. 백그라운드에서 데이터를 업데이트하는 동안 Please wait.../Loading...과 같은 Massage을 표시하려고합니다. PopupScreen을 사용하지 않고 어떻게 표시 할 수 있습니까?

아래 코드를 시도했지만 제대로 작동하지 않았습니다. 내가이 완료됩니다

VerticalFieldManager manager = new VerticalFieldManager(); 

manager.add(new LabelField("Please Wait...")); 
Screen popup = new PopupScreen(manager); 

이 사용 PopupScreen 내 전체 논리는 화면 변화가있을 것입니다 그리고 작업 시간이 소요됩니다.

FieldManager을 기존 MainScreen에 어떻게 추가 할 수 있는지 제안 해주세요.

미리 감사드립니다.

답변

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

} 
}); 
1

MainScreen 클래스에는이 작업에 사용할 수있는 상태 필드가 포함되어 있습니다. 클래스에서 확장 MainScreen 추가 :

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

그 상태를 제거 :

setStatus(null); 

그러나, 당신은 이벤트 스레드에서이 작업을 수행하고 그래서 OS가 사용자 인터페이스를 업데이트 할 수 있습니다 반환해야합니다. 이벤트 스레드 (버튼을 눌렀을 때 코드를 호출 할 스레드)에서 목록을 업데이트하는 경우 스페어 스레드에서 해당 작업을 수행하고 UiApplication.invokeLater()를 사용하거나 사용자 인터페이스에서 업데이트를 수행합니다.

관련 문제