2014-02-08 28 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"); 
        } 
       })); 
      } 
    }