2012-04-02 13 views
0

У меня есть проблема с пайсой коды:Ошибки при изменении переменной

 // 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 (View View) в финал внутр. Но когда это окончательно, я не могу изменить переменную . Я не вижу причины, по которой мне нужно сделать свою переменную final. И есть ли решение изменить мою переменную в onClick (View View)? лучшие regrads безымянного

+0

Вы должны опубликовать весь класс, чтобы мы могли узнать, к какой области относится ваше объявление переменной. –

ответ

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

1

сфера переменной ограничивается функцией, что вы объявляете все это в (предположительно onCreate()?). Это означает, что переменная обычно будет уничтожена в конце функции (что делает ее недоступной для вашего слушателя onClick), но если вы объявите ее окончательной, компилятор может в известном смысле обмануть и сохранить ее. Если вы хотите сохранить переменную для использования вне вашей функции, она должна быть переменной класса.

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; 
     } 
    }); 
    } 
} 
Смежные вопросы