modelos - blackberry keyone
¿Cómo se visualiza la cuenta regresiva de toda la aplicación en Blackberry? (1)
No es posible agregar un solo field
o manager
ui en dos manager
o screen
. Cada field
o manager
UI debe tener, como máximo, uno de los padres ( screen
o manager
).
Por lo tanto, si necesita un LabelField
que contenga y muestre la hora en diferentes screen
, entonces solo necesita implementar algún tipo de oyente que escuche los cambios de tiempo ... y para cada cambio debe actualizar la screen
y LabelField
con el nuevo valor Ya ha implementado un TimerTask
que le proporcionará datos actualizados.
[Editado - agregado más tarde]
puede verificar los siguientes códigos, no probados, pero algo así resolverá su problema ...
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
}
}
en el fragmento anterior, puede implementar la interfaz TimerListener
en cualquier instancia de pantalla y puede obtener actualizaciones cada vez que se MyTimerUtil
el evento por la clase MyTimerUtil
. Para eso, debe establecer una instancia de ScreeA
(que implementa TimerListener
) a través de setTimerListener()
de la clase MyTimerUtil
.
También es necesario iniciar el temporizador llamando al método startTimer()
.
Realizo y visualizo una cuenta atrás del reloj con este código
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);
Y cuando presiono una nueva pantalla, quiero que este reloj se muestre y cuente hacia abajo. Cómo puedo hacer eso ?