GWT Widgets上的Clear()方法不会删除子Widgets的ClickHandler

时间:2017-01-05 12:33:15

标签: gwt

我怀疑Widget的ClickHandler存在问题。是否通过调用父Widget的clear()方法从其父级中删除ClickHandler-added-Widget导致实时ClickHandler?

1 个答案:

答案 0 :(得分:0)

如果元素本身从其父元素中删除,则不会删除元素的ClickHandler,这是正确的。但这不是问题,因为父级的clear()方法只删除了所有子窗口小部件,仅此而已。否则,如果从父项中删除元素并将其添加到新容器中,则必须再次添加ClickHandler。

如果您的情况确实需要,可以在调用clear()方法后使用HandlerRegistration移除ClickHandler。

HandlerRegistration handler = button.addClickHandler(new ClickHandler() {
    @Override
    public void onClick(ClickEvent event) {
        //Do something
    }
});

parent.clear();
handler.removeHandler();

如果要对所有子窗口小部件执行此操作,可以使用带有HandlerRegistrations的列表(您必须始终保持最新状态,然后添加或删除窗口小部件)并循环遍历此列表,调用{{1}清除父母时。