如何刷新ContainerList

时间:2015-12-22 08:15:43

标签: codenameone

在运行时更新ContainerList的最佳方法是什么。我的ContainerList中的addPullToRefresh刚刚调用,我去&获取新数据,但如何刷新要在ContainerList中显示的数据。如何强制它使用新模型重建自己?

我尝试重新构建一个新的ContainerList并在Form中替换它,在一个单独的线程中完成所有操作并在Display.getInstance()。invoke中执行...(尝试了所有类型的调用),但我得到了一个这里是NullPointerException     在

  

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)     在com.codename1.ui.Display.edtLoopImpl(Display.java:1075)     在com.codename1.ui.Display.mainEDTLoop(Display.java:994)     在com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)     在com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

更多地了解这个问题,所以这是实际的问题:

我有一个容器(WatchList),其中包含一个ContainerList(LikeListView)。当调用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中的第1599行失败

   cmp.getComponentForm().deregisterAnimated(this);

as cmp.getComponentForm()为已删除的组件返回null。

那么,旧组件是否保存在DefaultLookAndFeel动画列表中?我怎么把它拿出来?

由于

-Yishai

1 个答案:

答案 0 :(得分:1)

创建用于创建初始列表模型的代码,并为ContainerList构建方法。

如果您正在使用Netbeans,请突出显示代码块 - >右键单击 - >重构 - >介绍 - >方法并为其命名或按Alt + Shift + M。

在addPullToRefresh的<select name="fontsize" id="size"> <option value="6">6</option> <option value="8">8</option> <option value="9">9</option> </select> <label class="pull-left" id="label1" >New Text</label> <label class="pull-left" id="label2" >New Text</label> <label class="pull-left" id="label3" >New Text</label> 方法中调用该方法。

您可以做的另一件事是致电run()