/** * Called when the activity is first created. */ @Override publicvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // to create a custom title bar for activity window requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.fields); // use custom layout title bar getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.topbar);
Если вы не хотите делать ее окончательной, вы всегда можете просто сделать ее глобальной переменной.
Ответ 2
Вы можете объявить переменную final или сделать ее переменной экземпляра (или глобальной). Если вы объявите ее final , вы не сможете изменить ее позже.
Любая переменная, определенная в методе и доступная анонимному внутреннему классу, должна быть окончательной. В противном случае вы могли бы использовать эту переменную во внутреннем классе, не подозревая, что если переменная изменится во внутреннем классе, а затем она будет использоваться позже во внешней области видимости, изменения, внесенные во внутреннем классе, не сохранятся во внутренней области видимости. По сути, то, что происходит во внутреннем классе, остается во внутреннем классе.
Я написал более подробное объяснение здесь . Это также объясняет, почему экземплярные и глобальные переменные не нужно объявлять final .
Вы можете объявить окончательный одноэлементный массив и изменять элементы массива, по-видимому, сколько захотите. Я уверен, что это нарушает саму причину, по которой это правило компилятора было реализовано в первую очередь, но это удобно, когда вы находитесь в временной привязке, как я был сегодня.
На самом деле я не могу приписать это заслуге. Это была рекомендация IntelliJ! Кажется немного халтурным. Но кажется не таким плохим, как глобальная переменная, поэтому я подумал, что это стоит упомянуть здесь. Это всего лишь одно из решений проблемы. Не обязательно лучшее.