Я использую анимацию, чтобы скрыть вид в верхней части экрана. Код анимации содержится в методе LoopAnimation()
, который вызывается из основного.Невозможно получить доступ к глобальной конечной переменной из внутреннего класса
public class MainActivity extends AppCompatActivity {
final View view = findViewById(R.id.view);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LoopAnimation(view); \\ The animation loop method
}
Этот LoopAnimation()
метод использует вложенную setOnClickListener
создать цикл анимации
public void LoopAnimation(View view){
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// starts the animation
view.animate().translationY(-100);
view.animate().setDuration(1500);
// reverses the animation
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Do some job here
view.animate().translationY(100);
view.animate().setDuration(1500);
LoopAnimation(view); // Method calls itself
// to create loop effect
}
});
}
});
}
Проблема заключается в том, что я получаю тривиальную ошибку, которую я не могу понять. Хотя я объявил view
как глобальные и окончательные, я получаю эту ошибку в LoopAnimation()
Variable 'view' is accessed from within inner class, needs to be declared final.
RogueBaneling ответил на ваш конкретный вопрос. Вы также обнаружите, что 'view' является нулевым, потому что вы не можете использовать' findViewById (...) 'до тех пор, пока не вызвали' setContentView (...) '. –
@KevinKrumwiede Спасибо. Итак, есть 3 способа сделать это (1) Я делаю глобальную ссылку и сбрасываю объект, на который он указывает каждый раз, или (2) каждый раз создаю новую локальную переменную с новой ссылкой (3), используя ключевое слово 'this'? –
Ничего из перечисленного. Ваша ссылка не является глобальной и не требуется. Также не обязательно быть «последним». Удалите локальную переменную (параметр метода), которая скрывает член класса, и просто обратитесь к члену класса как 'view'. –