更改变量时出错

时间:2012-04-02 21:51:08

标签: android variables final

我遇到了一些代码问题:

        // 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 无名

2 个答案:

答案 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;
      }
    });
  }
}