【发布时间】:2017-03-06 23:08:12
【问题描述】:
- 我加载了一个带有列表 (a) 的列表视图。
- 为了响应切换更改,我将列表视图内容切换到另一个列表 (b)。 如果列表 (a) 比列表 (b) 长,则超出的项目仍会显示在列表视图中,即使不再可选择。
例如,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);
}
});
如何让我的列表视图在切换内容之前使其空白?
【问题讨论】:
-
您的列表视图是否有自定义单元工厂?如果是这样,请将其包含在问题中。
-
没有自定义单元工厂。我只是修改了列表包含的对象的toString方法,所以列表可以认为是字符串列表。
-
好的,所以我的第一个猜测是不正确的。我从未见过这种行为:预期的行为是简单地调用
setItems(...)就足以完全刷新列表视图。我建议您创建一个 minimal reproducible example 和 edit 您的问题以包含它。 -
我用最小的应用程序测试了您发布的确切代码,我可以包装它,使其编译和运行,并且它完全按预期工作(每次都正确清除列表)。所以你的代码中的其他地方导致了这个问题。
标签: java listview javafx-8 refresh