gwt проблема с HandlerRegistration

У меня проблема. У меня есть карта и добавлен ClickHandler, но после нажатия кнопки я хочу ее удалить. Я знаю, что есть HandlerRegistration, но я не знаю, как его использовать. часть моего кода:

map.addMapClickHandler(new MapClickHandler()

        {
            public void onClick(MapClickEvent e) 
            {
                 ...
                }
        });

Может кто-нибудь помочь мне?


person john    schedule 17.01.2011    source источник
comment
на карте есть гугл карта в которую можно добавлять точки   -  person john    schedule 17.01.2011


Ответы (2)


MapWidget#addMapClickHandler() не возвращает HandlerRegistration, но класс MapWidget определяет удалить методMapClickHandler():

map.addMapClickHandler(new MapClickHandler() {
  @Override
  public void onClick(MapClickEvent event) {
    // Make sure map is visible to this inner class. It needs
    // either to be a member of the enclosing class or final.
    map.removeMapClickHandler(this);
  }
});
person Jason Terk    schedule 17.01.2011
comment
есть ошибка: несоответствие типов: невозможно преобразовать из void в HandlerRegistration - person john; 17.01.2011
comment
Вы правы — я не использую API Карт, поэтому на самом деле я не проверял то, что написал. Пример в моем ответе теперь должен работать. - person Jason Terk; 18.01.2011
comment
это все еще не работает. потому что я хочу удалить этот обработчик после нажатия кнопки, которая покажет мне маршрут (из ранее добавленных маркеров) - person john; 18.01.2011
comment
Можете ли вы уточнить, почему это решение не работает? Если вам нужно вызвать MapWidget#removeMapClickHandler() из другого места, вы можете это сделать, если у вас есть ссылка на MapClickHandler. - person Jason Terk; 18.01.2011
comment
хорошо, я справился с этим по-другому (без удаления обработчика). в любом случае, спасибо за вашу помощь. - person john; 19.01.2011

Если вам это все еще нужно, мне потребовалось некоторое время, чтобы найти решение.

final Set<HandlerRegistration> hack = new HashSet<HandlerRegistration>();
hack.add(map.addMapClickHandler(new MapClickHandler() {
    public void onClick(MapClickEvent e) {
        ...
        // remove handler here
        for (HandlerRegistration hr : hack) {
            hr.removeHandler();
        }
    }
}));
person trung    schedule 11.03.2011