0

私はこのコードを持っています:

DOM.setEventListener(row.getElement(), new ClickListener(){

    @Override
    public void onClick(Widget sender) {
    // TODO Auto-generated method stub

    }});

ClickListenerコードは問題なくextendsだと思いますが、次のようなEventListenerエラーが表示されます。The method setEventListener(Element, EventListener) in the type DOM is not applicable for the arguments (Element, new ClickListener(){})

4

1 に答える 1

3

本当の答えは、おそらくそうではないということです。これはリスナーをイベントにアタッチするために使用できますが、要素ごとに 1 つのリスナーのみをアタッチできます。このリスナーは、構成されているすべての dom イベントを取得します (「 」を参照DOM.sinkEvents)。ページがアンロードされる前に、すべてのリスナーをデタッチする必要があります。そうしないと、一部のブラウザでメモリ リークが発生します。

代わりに、ウィジェット (およびサブクラス) を使用してイベントを管理することを強く検討してください。他のウィジェットを追加する基本ウィジェットである RootPanel は、ページから他のすべてのウィジェットを切り離して、メモリ リークを防ぎます。

さらに、目的のイベントの種類に基づいて、その中で発生するイベントを聞くことができます。たとえば、通常はマウスオーバー イベントを発生させない Label のようなウィジェットでも、ハンドラーをアタッチして通知を受け取ることができます。

Label label = new Label();
label.addDomHandler(new MouseOverHandler() {
  @Override
  public void onMouseOver(MouseOverEvent event) {
    // do something
  }
}, MouseOverEvent.getType());
RootPanel.get().add(label);

ほとんどの場合、クリック イベントを取得する Button などの既存のサポート メソッドを使用しますHasClickHandlers

Button button = new Button();
button.addClickHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent event) {
    // do something
  }
});
panel.add(button);

GWT、ウィジェット、およびメモリ リークの詳細:

于 2012-10-03T21:28:58.493 に答える