在运行时更新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
答案 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()