我的数据源提供了一个ObservableList<String>,但是对于我的 ListView 我需要一个ObservableList<Warning>.
AWarning基本上只是字符串的装饰器,添加一个布尔值以提供一种跟踪 ListView 复选框状态的方法,如本答案中所提议的。
class Warning {
private final ReadOnlyStringWrapper name;
private final BooleanProperty checked;
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
目前,我正在观察原始列表中的更改事件,并手动添加/删除警告列表中的项目:
ObservableList<String> stringList = ...;
ObservableList<Warning> warningList = ...;
stringList.addListener(new ListChangeListener<String>() {
@Override
public void onChanged(ListChangeListener.Change<? extends String> change) {
if (change.wasAdded()) {
warningList.addAll(change.getAddedSubList().stream().map(Warning::new).collect(Collectors.toList()));
} else if (change.wasRemoved()) {
change.getRemoved().forEach(str -> {
warningList.removeIf(w -> str.equals(w.name));
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否有一种更优雅的方式来装饰我的字符串类型列表,以便它可以用作警告类型列表,而无需手动传递更改事件?
更准确地说:如果在原始列表中添加或删除字符串,我希望立即在警告列表中看到此更改,从而在 ListView 中看到此更改。