我使用此代码制作并显示时钟倒计时
LabelField time;
long mille=0;
Timer timer=null;TimerTask task=null;
public Timerscreen() {
mille=1000*60*1;
time=new LabelField();
add(time);
timer=new Timer();
task=new TimerTask() {
public void run() {
synchronized (UiApplication.getEventLock()) {
if(mille!=0){
SimpleDateFormat date=new SimpleDateFormat("mm:ss") ;
System.out.println("================="+date.formatLocal(mille)+"====================="+Thread.activeCount());
time.setText(date.formatLocal(mille));
mille=mille-1000;
}else{
time.setText("00:00");
mille=1000*60*1;
timer.cancel();
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.inform("Time expaired");
}
});
}
}
}
};
timer.schedule(task,0, 1000);
当我按下一个新屏幕时,我希望这个时钟仍然显示并倒计时。 我怎样才能做到这一点 ?
答案 0 :(得分:1)
无法将单个ui field
或manager
添加到两个manager
或screen
s ..每个ui field
或{{ 1}}最多只能有一个父级(manager
或screen
)。
因此,如果你需要一个manager
来保持并在不同的LabelField
上显示时间,那么你只需要实现某种监听器,它将监听时间的变化。更改您必须使用新值更新screen
和screen
。您已经实施了LabelField
,它将为您提供更新的数据。
[编辑 - 稍后补充]
您可以检查以下代码,但未经过测试,但这样的问题可以解决您的问题......
TimerTask
在上面的代码片段中,您可以在任何屏幕实例中实现class MyTimerUtil {
TimerListener listener = null;
public MyTimerUtil() {
}
public void setTimerListener(TimerListener listener) {
this.listener = listener;
}
public void startTimer() {
final int interval = 1000;
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
// add your codes..
// notify others
if (listener != null) {
listener.timeChanged();
}
}
};
timer.schedule(task, 0, interval);
}
}
interface TimerListener {
public void timeChanged();
}
class ScreeA extends MainScreen implements TimerListener {
public void timeChanged() {
// add Codes here on time changed event
}
}
接口,并且可以在TimerListener
类的每次更改事件时获得更新。为此,您必须通过MyTimerUtil
类的ScreeA
设置TimerListener
(实现setTimerListener()
)的实例。
还需要通过调用MyTimerUtil
方法来启动计时器。