【发布时间】:2014-12-16 00:28:29
【问题描述】:
我在 JavaFX 中有一个 ListView,当我删除一个项目时,会在 ListView 中显示更多项目,但不在列表中。
ObservableList 和 Extractor 的声明
Callback<ElectricDeviceType, Observable[]> deviceTypeExtractor = new Callback<ElectricDeviceType, Observable[]>() {
@Override
public Observable[] call(ElectricDeviceType t) {
return new Observable[] { t.maxValue, t.name, t.getDevices() };
}
};
ObservableList<ElectricDeviceType> deviceTypes = FXCollections
.observableArrayList(deviceTypeExtractor);
这里我将设备设置为 ListView
public void setElectricDevices(ElectricDeviceType... list) {
deviceTypes.addAll(list);
deviceTypeList.setItems(deviceTypes);
deviceTypeList
.setCellFactory(new Callback<ListView<ElectricDeviceType>, javafx.scene.control.ListCell<ElectricDeviceType>>() {
@Override
public ListCell<ElectricDeviceType> call(
ListView<ElectricDeviceType> listView) {
return new ElectricDeviceTypeListViewCell(_this,
simulation);
}
});
}
类 ElectricDeviceTypeListViewCell
public class ElectricDeviceTypeListViewCell extends ListCell<ElectricDeviceType> {
private MainWindowController controller;
private Simulation simulation;
public ElectricDeviceTypeListViewCell(MainWindowController c, Simulation s) {
controller = c;
simulation = s;
}
@Override
public void updateItem(ElectricDeviceType t, boolean empty) {
super.updateItem(t, empty);
if (t != null) {
ElectricDeviceTypeController data = new ElectricDeviceTypeController(controller, simulation);
data.setInfo(t);
setGraphic(data.getBox());
}
}
}
当我从我的 observable 列表中删除一项时,我的 listview 显示 5 个项目而不是 2 个。但我的 observable 里面只有 2 个项目。如果我删除所有项目,那么我也会删除重复项。
你能帮我解决这个问题吗?
【问题讨论】:
-
您不知道单元机制是如何实现的(即使您知道,也不应该依赖于保持不变的实现)。无法保证列表视图会为您添加的新项目重用显示已删除项目的相同单元格。请尝试建议的解决方案。
-
谢谢你,我试过了,它成功了:)
标签: listview javafx duplicates refresh