2011-08-08 61 views
1

我現在面臨的問題是,android模擬器似乎排隊點擊我在下面的按鈕。如果我按照常規速度點擊,那麼這是沒有問題的。但每當我這麼說,垃圾郵件點擊按鈕,它似乎收到所有的點擊,並做了這麼多的操作。Android模擬器隊列點擊?

例如: 數組長度爲5,如果我站在索引5上並快速點擊4次按鈕,我最終在索引1處結束,但如果我站在索引2處並且垃圾點擊三次,它拋出 java.lang.ArrayIndexOutOfBoundsException

代碼如下:

 ButtonGoBack.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
      // here i set it disabled to prevent mass clicks/taps/touches. 
      ButtonGoBack.setEnabled(false); 


      enumCounter--; 



      temporaryValue = values[enumCounter]; 

      doSomething(temporaryValue); 
       // hides button    
       if(enumCounter== 0) 
       { 
        ButtonGoBack.setVisibility(4); 
       } 


      } 

     }); 

100〜左右代碼行之後。

ButtonGoBack.setEnabled(true); 

似乎沒有辦法。

任何建議如何以不同的方式做到這一點?

+0

如果我理解正確,你希望你的按鈕只有在上一次點擊操作完成時才點擊,並且之前發生的所有點擊都需要忽略? – youri

+0

@youri完全一樣! – doge

+0

請使用setVisibility(View.INVISIBLE)而不是setVisibility(4)。總是使用定義的,人類可讀的常量,它會大量增加代碼可讀性,並且是一種很好的編碼風格。我只需要檢查文檔中的4。可能能夠回答的人可能不會這樣做。 – 2011-08-08 08:36:49

回答

1

try{}catch{}周圍,並通過一個遞增計數器解決0後,從去年開始。

ButtonGoBack.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View view) { 

       try 
       {        
       enumCounter--; 

       temporaryValue = values[enumCounter]; 

       doSomething(temporaryValue); 
        // hides button    
        if(enumCounter== 0) 
        { 
         ButtonGoBack.setVisibility(4); 
        } 
       } 
       catch(Exception e) 
       { 
        ButtonGoBack.setVisibility(4); 
        enumCounter++;   
       } 
       }   
      }); 
0

如果你想達到你可以

enumCounter--; 
if(enumCounter<0) enumCounter=4; 
     temporaryValue = values[enumCounter]; 
     doSomething(temporaryValue);