GWT removeHandler на первом уведомлении о событии

Я хочу удалить обработчик событий GWT в первый раз, когда я получаю событие. Я также не хочу загрязнять свой класс отслеживанием регистрационных объектов, которые не действительно необходимы. Мне в настоящее время кодировали его как:

final HandlerRegistration[] registrationRef = new HandlerRegistration[1];
registrationRef[0] = dialog.addFooHandler(new FooHandler()
{
    public void onFoo(FooEvent event)
    {
        HandlerRegistration removeMe = registrationRef[0];
        if(removeMe != null)
        {
            removeMe.removeHandler();
        }

        // do stuff here
    }
});

но использование registrationRef делает код менее читаемым. Существует ли лучший способ сделать это, не добавляя переменные к моему классу?

12
задан Igor Klimer 28 July 2011 в 20:55
поделиться

1 ответ

Я бы просто сделал объект HandlerRegistration полем включающего класса, чтобы компилятор не беспокоил вас и это более "элегантно", чем перетасовка массивов и прочего:

public class TestWidget extends Composite {
    //...

    HandlerRegistration handler;

    public TestWidget() {
        // ...

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

}
12
ответ дан 2 December 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: