2017-02-07 11 views
0

Я хотел бы использовать код ниже, чтобы создать массив слушателейзначение ошибки Java, возможно, уже назначены

 public void setListeners() { 
    final int k ; 
    for (k=0; k<6; k++) { 
     mNumberView[k].addTextChangedListener(new TextWatcher() { 
      @Override 

      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       mSprintHrs[k] = calcSprint(0, s); 
       String mSH = String.format("%.1f", mSprintHrs[k]); 
       mSprintView[k].setText(mSH); 
       calcTotal(); 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 
     }); 

Я получаю ошибку компиляции на к ++ в для постановки

Value k might already been assigned to 

Любое обходное решение?

+2

Не делайте это 'final'? – shmosel

+0

Компилятор хочет, чтобы он был окончательным для k во внутреннем цикле (mSprintHrs [k]) – Tori

ответ

1

Ошибка в том, что вы пытаетесь изменить переменную final. Если вам необходимо получить доступ к изменяемый переменной внутри анонимного подкласса, вы должны скопировать его в final переменной:

for (int i=0; i<6; i++) { 
    final int k = i; 

Возможное уборщик обходной путь будет извлечь тело цикла в отдельный метод с final параметр.

+0

Спасибо. Это работает. – Tori

 Смежные вопросы

  • Нет связанных вопросов^_^