例如,buyList = {' 100532',' 100533'}和saleList = {' 100000'}。如果我从选择了radioBuy开始,列表将显示' 100532'和' 100533'。将切换从radioBuy切换到radioSale将导致列表显示' 100000'和' 100533'。 ' 100533'不可选择,但它仍然可见。
可观察列表本身已显示正确的大小并包含正确的项目。它只是ListView显示屏显示一些旧数据。
我尝试过的事情:
1. ticketListView.getItems().clear()
然后在列表切换之前重建新列表
2.使用ticketListView.getItems().removeAll(0, ticketListView.getItems().size())
3.使用循环单独删除每个项目。
4.将ticketListView.refresh()
与上述所有内容结合使用。
我的切换ChangeListener:
typeGroup.selectedToggleProperty().addListener(new ChangeListener<Toggle>() {
public void changed(ObservableValue<? extends Toggle> observable, Toggle oldValue, Toggle newValue) {
if (typeGroup.getSelectedToggle().equals(radioBuy))
ticketListView.setItems(buyList);
if (typeGroup.getSelectedToggle().equals(radioTransfer))
ticketListView.setItems(transList);
if (typeGroup.getSelectedToggle().equals(radioSale))
ticketListView.setItems(saleList);
}
});
如何在切换内容之前让我的listview自动消隐?
答案 0 :(得分:1)
抱歉浪费每个人的时间。事实证明我确实在使用自定义单元工厂:
ticketListView.setCellFactory(new Callback<ListView<Header>,
ListCell<Header>>() {
public ListCell<Header> call(ListView<Header> headerListView) {
return new ListCell<Header>() {
@Override
protected void updateItem(Header item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item.getTicket());
}
}
};
}
}
);
删除此代码并按照我之前提到的那样重写toString,解决了这个问题。显然我需要更多地研究细胞工厂......
答案 1 :(得分:1)
if (item != null) {
setText(item.getTicket());
} else {
setText(null);
}
您应该添加此代码以清除空白单元格。