Я не могу обновить свой контроль javafx.scene.control.ListView<Todo>
. Как вы видите, listview отображает свойство заголовка. Когда я изменяю заголовок todo, в представлении списка все еще отображается старое значение.Update List-View при изменении модели
public class Todo {
private StringProperty headline = new SimpleStringProperty();
private StringProperty description = new SimpleStringProperty();
public Todo(String aHeadline) {
this.setHeadline(aHeadline);
}
public Todo(String aHeadline, String aDescription) {
this(aHeadline);
this.description.set(aDescription);
}
public String getDescription() {
return this.description.get();
}
public StringProperty descriptionProperty() {
return this.description;
}
public void setDescription(String aDescription) {
this.description.set(aDescription);
}
public String getHeadline() {
return this.headline.get();
}
public void setHeadline(String aHeadline) {
this.headline.set(aHeadline);
}
public static ObservableList<Todo> getMockups() {
try {
return FXCollections.observableArrayList(TodoXmlParser.getTodosFromXml(Paths.get("/Todos.xml")));
} catch (JDOMException | IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public String toString() {
return this.headline.get();
}
}
this.listView = new ListView<>();
this.listView.setItems(Todo.getMockups());
this.listView.getSelectionModel().getSelectedItem().setHeadline("new");
Я отсутствует метод, как listview.refresh(), or update()
Так что это правильный способ сделать это?
Редактировать: Я нахожу способ сделать это, но я был бы рад, если кто-нибудь сможет объяснить «официальный» способ сделать это.
void updateListView(Todo todo) {
int index = this.listView.getItems().indexOf(todo);
this.listView.getItems().remove(todo);
this.listView.getItems().add(index, todo);
}
Спасибо за обходное решение, но я надеюсь, что есть лучший способ сделать это. Я подожду несколько дней, прежде чем я приму свой ответ. Кроме того, я отредактировал свой пост для более эффективной работы по обновлению отдельных элементов. – Timo
Нашел лучший способ, обновив мой пост. – Marc
И, кстати, ваш способ обновления списка более эффективен, если вы выбираете только один элемент ... Если у вас большой список, и если вы выберете большое количество элементов, 'listView.getItems(). Remove (selectedList) 'займет больше времени, чем удаление и добавление списка снова, потому что ему придется извлекать все случаи в списке. Я недавно упал в эту яму ... Надеюсь, теперь все отлично работает. – Marc