我有一个过滤器,通过含有标签的ArrayList列表视图搜索(用户名):ListView控件过滤仅适用于第一个项目
public void updateList() {
UserDAO theDAO = new UserDAO();
userList = theDAO.storeUsers();
listView.setItems(userList);
filterField.textProperty().addListener(new ChangeListener() {
public void changed(ObservableValue observable, Object oldVal, Object newVal) {
search((String) oldVal, (String) newVal);
}
});
}
public void search(String oldVal, String newVal) {
if (oldVal != null && (newVal.length() < oldVal.length())) {
listView.setItems(userList);
}
String value = newVal.toUpperCase();
ObservableList<Label> secondList = FXCollections.observableArrayList();
for (Object entry : listView.getItems()) {
boolean match = true;
Label entryText = (Label) entry;
if (!entryText.getText().toUpperCase().contains(value)) {
match = false;
break;
}
if (match) {
secondList.add(entryText);
}
}
listView.setItems(secondList);
}
截至目前,我的ListView包含:
测试 third
每当我在“测试”中键入任何字母,它会成功过滤出“第三”和“123”,并且只在ListView中显示“测试”当我输入“t”时,它不应该显示“第三”吗?
另外,当我在过滤器中输入“123”或“third”时,它会过滤掉所有内容。
我该如何解决这个问题?