2014-02-08 26 views
0

我有这样的代码:如何在Java中删除处理程序列表<Image>?

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();一个按钮,当我点击该按钮1时,一切都很好,这意味着点击图片时,它会打印:

 
test 

但是,如果我点击按钮2时&然后在图像上单击仅有1点时,它会打印出

 
test 
test 

这意味着伊玛ge被添加了多个ClickHandler(); & filterImageHandlerReg.removeHandler();不起作用。

如何解决这个问题?

+0

您可以替换为环(图片filterImage:getView()getFilterImageList()。) –

+0

是的,但很难看到,和我有需要用到我 – Tum

+0

然后分开算呢。如果你传递了一个链表,你只是写了一个运行在O(n^2)时间的方法。 –

回答

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