如何在Java中删除List <img/>的Handler?

时间:2014-02-08 07:38:03

标签: java

我有这段代码:

private HandlerRegistration filterImageHandlerReg=null;
public void resetVariables(){
    if(filterImageHandlerReg!=null){
         filterImageHandlerReg.removeHandler();
     }
}

public void callData(){
      resetVariables();
      for(int i=0; i<getView().getFilterImageList().size(); i++){
           Image filterImage=getView().getFilterImageList().get(i);
           filterImageHandlerReg= filterImage.addClickHandler(new ClickHandler(){
                 @Override
                 public void onClick(ClickEvent event) { 
                      System.out.println("test");
                 }
           });
      }
}

Thre是callData();的按钮,当我点击该按钮一次,一切正常,这意味着点击图片时会打印出来:

test

然而,如果我点击按钮2次&amp;然后当点击图像一次时,它将打印出来

test
test

表示图片已添加多个ClickHandler();&amp; filterImageHandlerReg.removeHandler();不起作用。

如何解决问题?

1 个答案:

答案 0 :(得分:0)

我认为你应该保留一份HandlerRegistration列表。

private List<HandlerRegistration> filterImageHandlerRegistrations=null;
public void resetVariables(){
    if(filterImageHandlerRegistrations!=null){
        for(HandlerRegistration handlerRegistration: filterImageHandlerRegistrations)
         handlerRegistration.removeHandler();
     }
}

    public void callData(){
          resetVariables();
          filterImageHandlerRegistrations=new ArrayList<HandlerRegistration>();
          for(int i=0; i<getView().getFilterImageList().size(); i++){
               Image filterImage=getView().getFilterImageList().get(i);

               filterImageHandlerRegistrations.add(filterImage.addClickHandler(new ClickHandler(){
                     @Override
                     public void onClick(ClickEvent event) { 
                          System.out.println("test");
                     }
               }));
          }
    }