我有一个ListView,当用户更改选择时我会收听selectedItemProperty。
在这个监听器中,我向UndoManager添加了一个事件。当我尝试撤消选择时,selectedItemProperty会触发ChangeListener,它会向UndoManger添加另一个事件并创建一个infinit循环,因为它会在UndoManger撤消时添加一个ListViewSelectionChange。
mapply(function(x, y) lm(y ~ x), colmax, colmean, SIMPLIFY = F)
有人知道如何阻止listview调用监听器吗?
塞巴斯蒂安
答案 0 :(得分:1)
您可以添加一个简单的标志来指示是否应该触发侦听器:
public class DeviceConfigurationController {
@FXML private ListView<DeviceConfiguration> device_list;
private boolean pauseListener;
@FXML
private void initialize() {
device_list.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> {
if(!pauseListener)
UndoManager.add(new ListViewSelectionChange<>(oldValue, device_list));
}
});
}
@FXML
private void undo() {
pauseListener = true;
UndoManager.undo();
pauseListener = false;
}
}