2015-12-22 109 views
2

在運行時更新ContainerList的最佳方式是什麼?我的ContainerList中的addPullToRefresh只是被調用,我去&獲取新的數據,但我怎麼刷新數據顯示在ContainerList中。我如何強制它用新模型重建自己?我嘗試重建一個新的ContainerList並將其替換爲Form,在一個單獨的線程中完成它,並在Display.getInstance()。invoke ...(嘗試所有類型的調用)中完成它,但是我得到這裏 一個NullPointerException在如何刷新ContainerList

com.codename1.ui.plaf.DefaultLookAndFeel $ 1.animate(DefaultLookAndFeel.java:1599) 在com.codename1.ui.Form.loopAnimations(Form.java:1295) 在com.codename1.ui.Form.repaintAnimations(Form.java:1280) at com.codename1.ui.Display.edtLoopImpl(Display.java:1075) at com.codename1.ui.Display.mainEDTLoop(Display.java :994) 在com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 在com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)


學到更多關於這個問題,所以這裏是實際問題:

我有一個ContainerList(LikeListView)的容器(WatchList)。當調用ContainerList addPullToRefresh時,它會調用其父組件(WatchList)上的contentChanged()。 contentChanged創建一個新的LikeListView並用新的替換舊的。這是怎樣的代碼看起來像:

public void contentChanged() 
    { 
    final WatchList self = this; 
    Display.getInstance().scheduleBackgroundTask(new Runnable() 
     { 
     public void run() 
      { 
      CloudData.refreshLikeList(); 
      Display.getInstance().callSerially(new Runnable() 
       { 
       public void run() 
        { 
        LikeListView lv = new LikeListView (self); 
        self.replace (myListView, lv, null); 
        myListView = lv; 
        } 
       });     
      } 
     }); 
    } 

它沒有問題,運行,但它完成後,有一個NullPointerException

com.codename1.ui.plaf.DefaultLookAndFeel$1.animate(DefaultLookAndFeel.java:1599) 
at com.codename1.ui.Form.loopAnimations(Form.java:1295) 
at com.codename1.ui.Form.repaintAnimations(Form.java:1280) 
at com.codename1.ui.Display.edtLoopImpl(Display.java:1075) 
at com.codename1.ui.Display.mainEDTLoop(Display.java:994) 
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) 
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) 

看起來好像老LikeListView被稱爲動畫在外觀和感覺,並在DefaulrLookAdnFeel

cmp.getComponentForm().deregisterAnimated(this); 

爲cmp.getComponentForm(上線1599失敗)的移除的組件返回null。

因此,舊組件被保存在DefaultLookAndFeel動畫列表中的某個位置?我怎樣才能把它從那裏拿出來?

感謝

-Yishai

回答

1

讓您用來創建初始列表模式,並建立一個ContainerList方法的代碼。

如果你正在使用NetBeans,突出顯示的代碼塊 - >右鍵 - >重構 - >介紹 - >方法,並給它一個名稱或按Alt + Shift + M。

調用這個方法裏面您的addPullToRefresh的run()方法。

你可以做的另一件事是打電話reloadForm();