2012-04-02 68 views
0

我有一個代碼PICE一個問題:錯誤而改變的變量

 // Feld 1 OnClick int punkte; 
    int punkte; 
    punkte=0; 
    TextView counter = (TextView) findViewById(R.id.counter); 
    counter.setText(Integer.toString(punkte)); 

    TextView next = (TextView) findViewById(R.id.Farbent1); 
    next.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      punkte=punkte+1; 
     }; 
    }); 

當我問日食它說,我必須做我的「punkte」在公共無效的onClick(查看查看)到最終INT。但是當它是最後我不能改變變量 我看不到我必須做我的變數final的原因。有沒有解決方案來改變我的變量onClick(View View)? 最好regrads 無名

+0

您應該發佈整個類,以便我們知道變量聲明屬於哪個範圍。 – 2012-04-02 22:12:18

回答

2

爲了指局部變量的回調(中的onClick()方法)變量的內部,使得編譯器知道被宣佈「最終」,所提到的也不會更改。

您可以通過將punkte設置爲類級字段來輕鬆解決此問題。

private int punkte = 0; 

private void myMethod(){ 

    TextView counter = (TextView) findViewById(R.id.counter); 
    counter.setText(Integer.toString(punkte)); 

    TextView next = (TextView) findViewById(R.id.Farbent1); 
    next.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      punkte=punkte+1; 
     }; 
    }); 

} 
+0

謝謝!有用! – nameless 2012-04-03 17:34:37

1

變量的範圍僅限於聲明的所有這些都在函數(大概onCreate()?)。這意味着變量通常會在函數結束時被銷燬(使得onClick監聽器無法訪問),但是如果將其聲明爲final,編譯器在某種意義上可以欺騙並保留它。如果你想維護變量以供你的函數使用,它需要是一個類變量。

public class MyClass extends Activity{ 
    private int punkte = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    //Do stuff ... 
    TextView counter = (TextView) findViewById(R.id.counter); 
    counter.setText(Integer.toString(punkte)); 

    TextView next = (TextView) findViewById(R.id.Farbent1); 
    next.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      punkte=punkte+1; 
     } 
    }); 
    } 
}