2011-05-20 17 views
0

我有一個循環向管理器添加字段,我試圖延遲每個字段被繪製到屏幕上的時間。我一直在下面的代碼嘗試,但它只是當所有的領域已被添加到它的經理。 這可能嗎?延遲顯示管理器中的字段(黑莓)

manager.add(field); 
manager.invalidate();//force a repaint of the manager 
Thread.sleep(1000); 

感謝

回答

2

的Invalidate不一定強制油漆,它只是說,在接下來的塗料領域(或經理你的情況)需要重新繪製。這是一個微妙的差異,但它可能造成混亂。你可能想要嘗試的是調用Screen.doPaint(),這將強制整個屏幕重繪。另外,將sleep()放入Event線程中也無濟於事,因爲繪畫也是在同一個線程上完成的。

如果您嘗試使用第二次延遲向您的管理器順序添加字段,則應該將此邏輯放入其自己的Thread中,並在調用manager.add(field)時執行synchronized(UiApplication.getEventLock()){//add fields}。然後你可以打電話給你的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()

+0

感謝偉大的答案。你爲什麼在這裏同步 - 同步(UiApplication.getEventLock()){ ? – 2011-05-20 14:08:09

+0

因爲您需要向經理添加字段。 – Swati 2011-05-20 14:57:38