我遇到了一些代码问题:
// 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;
};
});
当我问eclipse时,它说我必须在public void onClick(View View)中做我的“punkte”到最终的int。但是当它是最终的时候我无法改变变量 我无法看到为什么我必须做我的变量final。是否有解决方案在onClick(View View)中更改我的变量? 最好的regrads 无名
答案 0 :(得分:2)
为了引用回调内部的局部变量(onClick()方法),必须将变量声明为“final”,以便编译器知道对它的引用不会改变。
您可以通过将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;
};
});
}
答案 1 :(得分: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;
}
});
}
}