При попытке использовать систему ListEditor
GWT мне не удалось найти работающий пример, в котором пользовательский интерфейс каждого элемента в списке имел кнопку удаления/удаления.
Все найденные мной примеры были похожи на этот[1] и реализация EditorSource.create()
создает для каждого элемента Editor
и, по-видимому, подключает обработчик для удаления элемента из базового списка через listEditor.getList().remove(index)
.
Однако анонимная реализация обработчика удаления замыкается вокруг значения индекса во время создания субредактора, что приводит к удалению IndexOutOfBoundExceptions
или неправильного элемента, поскольку каждое удаление изменяет индекс всех элементов, следующих за ним.
Я дернул себя за волосы на некоторое время, пытаясь увидеть, чего мне не хватало в примерах, которые препятствовали тому, чтобы это произошло, но, насколько я могу судить, у них действительно была эта проблема, поэтому, хотя исправление довольно простое, я все же опубликую это здесь, так что есть хотя бы один пример, который люди могут найти, который правильно удаляет элемент.
[1] Я думаю, что все примеры, которые я нашел, были получены из того, на который я ссылался, хотя в этом, в частности, было немного больше логики в remove(), и, возможно, он делал что-то, чтобы избежать проблемы, например, каким-то образом исправляя порядок списка, Я не копался в другом коде в этом проекте.