在運行時更新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