我刚刚将这段代码添加到我的列表程序中,我得到了一个例外。我不确定发生了什么,它避免了我用它调试的努力。具体而言,异常发生在新列表的分配上。 rankList是ListView<Rank>
rankList.getItems().addListener(new ListChangeListener<Rank>() {
@Override
public void onChanged(ListChangeListener.Change<? extends Rank> c) {
List<? extends Rank> ranks = c.getAddedSubList();
Collections.sort(ranks, (Rank t, Rank t1)
-> Long.compare(t.getNumericalRankApproximation(),
t1.getNumericalRankApproximation()));
setValue(ranks.get(ranks.size()).getNumericalRankApproximation());
increment();
}
});
例外:
Caused by: java.lang.IllegalStateException: Invalid Change state: next() must be called before inspecting the Change.
答案 0 :(得分:8)
您必须遍历传递给change
方法的onChanged
。有关详细信息,请参阅docs,但有点像
rankList.getItems().addListener(new ListChangeListener<Rank>() {
@Override
public void onChanged(ListChangeListener.Change<? extends Rank> c) {
while (c.next()) {
if (c.wasAdded()) {
List<? extends Rank> ranks = c.getAddedSubList();
Collections.sort(ranks, (Rank t, Rank t1)
-> Long.compare(t.getNumericalRankApproximation(),
t1.getNumericalRankApproximation()));
setValue(ranks.get(ranks.size()).getNumericalRankApproximation());
increment();
}
}
}
});