要监听ObservableList
我在监听器中使用以下代码:
@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()
只是{{1}}表达的捷径。
答案 0 :(得分:4)
对于无法由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
}
}
}
}
答案 1 :(得分:0)
重要提示:在调用any之前调用next()方法是必要的 其他改变方法。调用reset()后也是如此。该 只有在任何时候都可以使用的方法是getList()。
所以是的,它必须被称为:
这实际上是c.getList()。subList(c.getFrom()的快捷方式, c.getTo());
它还会调用c.getFrom()
和c.getTo()
。