Invalidate не обязательно вызывает рисование, оно просто говорит о том, что на следующей краске поле (или менеджер в вашем случае) необходимо перерисовать.Это тонкая разница, но это может вызвать путаницу.Вы можете попробовать Screen.doPaint()
, что заставит весь экран перерисоваться.Кроме того, размещение sleep () в вашей ветке событий не поможет, потому что рисование также выполняется в той же нити.
Если вы пытаетесь последовательно добавить поля к своему менеджеру с этой второй задержкой, вы должны поместить эту логику в свой собственный поток и выполнить synchronized(UiApplication.getEventLock()){//add fields}
при вызове manager.add (поле).Затем вы можете позвонить своему Thread.sleep(1000)
, чтобы правильно отобразить задержку.Также, как и некоторая добавленная информация, вызов add()
по своей сути вызывает вызов invalidate (), поэтому вам не нужно его добавлять.Вот простой пример второй задержки при добавлении
protected void addDelayedFields() {
Thread t = new Thread( new Runnable() {
public void run() {
for(int i=0;i<SOME_LIMIT;i++) {
synchronized(UiApplication.getEventLock()) {
manager.add(new LabelField(i.toString());
}
try{
Thread.sleep(1000);
}
catch(Exception e){ }
}
}
});
t.start();
}
Рисование должно происходить после добавления (), но если этого не произойдет, вы также можете позвонить yourScreen.doPaint()