Я подозреваю, что проблема с ClickHandler Widget. Удалось ли удалить дочерний элемент ClickHandler из своего родителя, вызвав метод clear() родительского виджета в live ClickHandler?Метод Clear() на GWT Виджеты не удаляют дочерние виджеты ClickHandler
ответ
Вы правы с предположением, что ClickHandler элемента не удаляется, когда сам элемент удаляется из его родителя. Но это не проблема, потому что метод родителя просто удаляет все дочерние виджеты, не более того. В противном случае вам всегда нужно будет добавить ClickHandler снова, если вы удалите элемент из его родителя и добавьте его в новый контейнер, например.
Вы можете использовать HandlerRegistration для удаления ClickHandler после вызова метода clear()
, если это действительно необходимо в вашем случае.
HandlerRegistration handler = button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
//Do something
}
});
parent.clear();
handler.removeHandler();
Если вы хотите сделать это для всех дочерних виджетов вы можете использовать список с HandlerRegistrations (вы должны держать в курс всегда вы добавление или удаление виджета) и цикла через этот список вызывающего removeHandler()
когда очистка родителя.
clear() также убивает EventHandlers на том виджетах, добавленном в Panel. Поэтому нам не нужно заботиться об этом. http://www.gwtproject.org/articles/dom_events_memory_leaks_and_you.html – baris