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 ?