Теперь, когда я посмотрю на него, ваша проблема может заключаться в том, что View v передается в качестве параметра методу onClick объекта OnClickListener, и приведенный ниже код может пытаться получить доступ вместо вашей переменной View верхнего уровня.
Я бы рекомендовал реорганизовать имена переменных, чтобы вы ссылались на правильную переменную. Если переданное представление является тем, которое вы фактически хотите использовать, оно должно быть объявлено как окончательное в сигнатуре метода:
public void onClick(final View v) {
Если переменная во вложенной области видимости вложенного анонимного класса объявляется окончательным или фактически окончательным, вы просто должны иметь доступ к нему из любого уровня вложенных внутренних анонимных классов.
Чтобы убедиться в этом, я сделал небольшой пример и попробовал сам:
import java.util.function.*;
public class Main {
public static void main(String[] args) {
final int test = 11;
Runnable runnable = new Runnable() {
public void run() {
Runnable runnable = new Runnable() {
public void run() {
System.out.println(test);
}
};
runnable.run();
}
};
runnable.run();
}
}
Как вы можете видеть, второй исполняемый файл вложен в другой исполняемый файл, и выполнение кода обращается к целочисленному тесту и печатает его, как следует.