2013-04-08 83 views
0

這是+和 - 按鈕的for循環,單擊後會更改edittext et []中的文本,但有一些錯誤需要將變量x聲明爲final,但是一旦將x聲明爲final, for循環中的x ++顯示了另一個錯誤,它要求x在沒有final的情況下被聲明,我可以如何在onClick中使用變量x?for循環onclicklistener

  for(int x=0; x<itemAmt; x++){ 
     btn[0][x].setOnClickListener(new Button.OnClickListener(){ 
      public void onClick(View v) { 

       int num=Integer.parseInt(et[x].getText().toString()); 
       num++; 

      } 

     }); 

     btn[1][x].setOnClickListener(new Button.OnClickListener(){ 
      public void onClick(View v) { 

       int num=Integer.parseInt(et[x].getText().toString()); 
       num--; 

      } 

     }); 
     } 
+0

請張貼** **精確誤差(S)你得到。 – 2013-04-08 14:44:01

+1

什麼是et?文本框? – RvdK 2013-04-08 14:44:11

+1

@blackbelt提供了一個解決方案,但是我沒有看到你的聽衆的觀點。他們根本沒有做任何有用的事情。 – 2013-04-08 14:45:24

回答

3

簡單地workorund,你可以聲明for環路內final變量並指定x

for(int x=0; x<itemAmt; x++){ 
    final int myX = x; 
    btn[0][x].setOnClickListener(new Button.OnClickListener(){ 
     public void onClick(View v) { 

      int num=Integer.parseInt(et[myX].getText().toString()); 
      num++; 

     } 

    }); 

    btn[1][x].setOnClickListener(new Button.OnClickListener(){ 
     public void onClick(View v) { 

      int num=Integer.parseInt(et[myX].getText().toString()); 
      num--; 

     } 

    }); 
    } 
+1

+1用於解決問題,但由此產生的代碼非常可怕,未來的維護人員可能不會知道爲什麼這樣做。一般來說,我會嘗試以不同的方式做到這一點。 – 2013-04-08 14:48:24

+0

@DavidWasser我同意你的意見 – Blackbelt 2013-04-08 14:51:00