为了监听ObservableList
,我在listener中使用了以下代码:
@Override
public void onChanged(ListChangeListener.Change<? extends MyClass> c) {
for(MyClass s : c.getAddedSubList()) {
// process s
}
}
不幸的是,我得到了很多例外:
java.lang.IllegalStateException: Invalid Change state: next() must be called before inspecting the Change.
我应该在循环前调用next()
吗?但这与ListChangeListener
javadoc所说的getList()
应该在任何时候都可以工作的说法相矛盾,getAddedSubList()
只是getList()
表达式的快捷方式。
发布于 2015-04-05 19:13:26
对于无法由来自ListChangeListener.Change.getXXX()
方法的一组结果表示的单个事件,可能会触发更改事件。(例如,在某些情况下,如果在可观察列表上调用setAll(...)
。)为了解释这样的变化,你必须遍历“变化表示”的集合,获取每个变化的信息。正确的习惯用法是
@Override
public void onChanged(ListChangeListener.Change<? extends MyClass> c) {
while (c.next()) {
if (c.wasAdded()) {
for(MyClass s : c.getAddedSubList()) {
// process s
}
}
}
}
发布于 2015-04-05 17:31:55
要点:在调用任何其他更改方法之前,必须先调用next()方法。在调用reset()之后也是如此。在任何时候,唯一有效的方法就是getList()。
所以,是的,必须将其命名为:
这实际上是c.getList().subList(c.getFrom(),c.getTo())的快捷方式;
它还调用c.getFrom()
和c.getTo()
。
https://stackoverflow.com/questions/29460015
复制相似问题