如何在Blackberry上显示整个应用程序的时钟倒计时?

时间:2011-12-16 09:07:30

标签: blackberry timer clock countdown

我使用此代码制作并显示时钟倒计时

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

当我按下一个新屏幕时,我希望这个时钟仍然显示并倒计时。 我怎样才能做到这一点 ?

1 个答案:

答案 0 :(得分:1)

无法将单个ui fieldmanager添加到两个managerscreen s ..每个ui field或{{ 1}}最多只能有一个父级(managerscreen)。

因此,如果你需要一个manager来保持并在不同的LabelField上显示时间,那么你只需要实现某种监听器,它将监听时间的变化。更改您必须使用新值更新screenscreen。您已经实施了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方法来启动计时器。