12 Stimmen

GWT removeHandler bei der ersten Ereignisbenachrichtigung

Ich möchte einen GWT-Ereignishandler entfernen, wenn ich zum ersten Mal ein Ereignis erhalte. Ich möchte auch vermeiden, meine Klasse mit Tracking-Registrierungsobjekten zu verschmutzen, die nicht wirklich notwendig sind. Ich habe es derzeit als codiert:

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
    }
});

aber die Verwendung von registrationRef macht den Code weniger lesbar. Gibt es eine bessere Möglichkeit, dies zu tun, ohne Variablen zu meiner Klasse hinzuzufügen?

12voto

Igor Klimer Punkte 15301

Ich würde einfach die HandlerRegistration Objekt ein Feld der umschließenden Klasse. Auf diese Weise werden Sie nicht vom Compiler gestört und es ist "eleganter" als das Mischen von Arrays und so weiter:

public class TestWidget extends Composite {
    //...

    HandlerRegistration handler;

    public TestWidget() {
        // ...

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

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X