Не удается удалить элемент ListView в tornadoFX

Есть два списка, я могу перетащить элемент в другой, но перетаскиваемый элемент не будет удален из исходного списка.

Я знаю, что код не является правильным способом обработки данных, однако я думаю, что он должен работать, но это не так.

     ...
    setOnDragDone {event ->
       removeSelected(event.gestureSource)
    }
    ...
    fun  removeSelected(gestureTarget: Any?) {
        var listview = gestureTarget as ListView<String>
        val modelItems = FXCollections.observableList(listview.selectionModel.selectedItems)
        if (modelItems != null) {
            listview.selectionModel.clearSelection()
            listview.items.removeAll(modelItems)
        }
    }

Спасибо.


person wolfrevo    schedule 26.05.2018    source источник


Ответы (1)


Вы слишком много думаете об этом и ставите себе некоторые ловушки по пути :)

Вы создаете список modelItems как наблюдаемый список, поддерживаемый свойством selectedItems ListView. Таким образом, изменения в выбранных элементах в ListView будут отражены в вашем свойстве modelItems.

Когда вы звоните selectionModel.clearSelection(), ваш список modelItems также пуст, поэтому вы звоните removeAll(anEmptyList).

Просто сделайте listview.items.removeAll(listview.selectionModel.selectedItems). ListView обновит список выбранных элементов, когда элементы будут удалены из резервного списка.

person Edvin Syse    schedule 26.05.2018
comment
listview.items.removeAll(listview.selectionModel.selectedItems) получает java.lang.UnsupportedOperationException, даже если clearSelection() закомментирован, он все равно не удаляется. - person sunfy; 27.05.2018
comment
Я создаю копию выбранных элементов из-за stackoverflow.com/questions/12132896 /, я не уверен, что это все еще необходимо. - person sunfy; 27.05.2018
comment
Это будет означать, что ваш список, связанный с функцией listview.items, не может быть изменен. Как вы распределяете предметы? Попробуйте присвоить FXCollection.observableArrayList‹String›() значение listview.items при его создании. - person Edvin Syse; 27.05.2018
comment
СПАСИБО, сэр, это работает, не понял, что список неизменен. - person sunfy; 27.05.2018
comment
С удовольствием :) Это будет зависеть от того, как вы определили список, но обычно вы должны работать с наблюдаемыми изменяемыми структурами данных в JavaFX IMO. - person Edvin Syse; 27.05.2018