в Java вы не можете использовать не конечные (а также неэффективно-окончательные ) переменные в лямбда-выражениях, а также в анонимных внутренних классах.
Вы можете получить избавьтесь от лямбда-выражения, создав класс, реализующий интерфейс View.OnClickListener
, и передайте ему переменную i в качестве параметра конструктора.
, например:
class MyButtonClickListener implements View.OnClickListener {
private int parameterIndex;
public MyButtonClickListener(int parameterIndex) {
this.parameterIndex = parameterIndex;
}
public void onClick(View v) {
tempToMaintain.setValue(listParameters.get(parameterIndex));
}
}
И это должно быть так. Передайте tempToMaintain и listParameters в качестве параметров конструктора (так же, как мы это сделали с parameterIndex ), если экземпляры вашего нового класса не могут контекстно получить к ним доступ.
Теперь Вы можете изменить привязку к обработчику событий clickListener, чтобы он выглядел следующим образом:
for (int i = 0; i < options; i++) {
Button button = new Button(this);
button.setId(position);
buttons[i] = button;
buttons[i].setOnClickListener(new MyButtonClickListener(i));
}
Надеюсь, это поможет.