2016-01-15 9 views
0
View.OnClickListener handleOnClick(ToggleButton mButton, boolean mBoolean) { 
    return new View.OnClickListener() { 
     public void onClick(View v) { 
      mBoolean = !mBoolean; 
      updateUi(mButton, mBoolean); 
     } 
    }; 
} 

mBoolean и mButton «доступ внутри внутреннего класса должен быть объявлен окончательный»не удается получить доступ к переменной в пределах внутреннего класса, но мне нужно, чтобы изменить переменную, поэтому я не могу объявить его окончательным либо

Но когда я это делаю, я не могу выполнить mBoolean =! MBoolean, потому что говорит, что я не могу изменить конечную переменную.

ответ

6

Просто передайте mBoolean в свою противоположность updateUi(mButton, !mBoolean);

+0

но он все еще говорит, что я не могу выполнить updateUi (mButton,! MBoolean); потому что они должны быть объявлены окончательными. Неужели я могу сделать это, не объявив их окончательными? Потому что я хочу знать, как это сделать, поскольку мне нужно изменить переменные в будущем. –

+0

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

+0

Спасибо за помощь! Я очень ценю ваши усилия. Мой код совсем другой и запутанный, и это будет еще более запутанным для чтения. В принципе, идея очень проста. Я пытаюсь сделать это: создать массив ToggleButton, а также логический массив для отслеживания состояния. Когда onClick запускается для какой-либо конкретной кнопки, это состояние изменится (скажем, от off to on), и так будет доступно (скажем, от «button1_off.png» до «button1_on.png». Я только начинаю учиться поэтому я не могу думать о более умном способе сделать это. Еще раз спасибо! –

0

Если необходимо изменить значение внешней переменной от lisneter - использовать конечный массив вместо примитивной.