2017-01-05 10 views

ответ

0

Вы правы с предположением, что 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() когда очистка родителя.

+0

clear() также убивает EventHandlers на том виджетах, добавленном в Panel. Поэтому нам не нужно заботиться об этом. http://www.gwtproject.org/articles/dom_events_memory_leaks_and_you.html – baris