Сегодня у меня был сценарий, в котором я выполнял следующее действие:
myViewGroup.setVisibility(View.GONE);
Прямо в следующем кадре я выполнял if
проверку где-то еще для состояния видимости этого представления. И угадай что? Следующее условие проходило:
if(myViewGroup.getVisibility() == View.VISIBLE) {
// this if check was fulfilled magically
}
Размещая точки останова, вы видите, что видимость меняется на GONE
, но прямо на следующем кадре она волшебным образом становится VISIBLE
. Я пытался понять, как, черт возьми, это могло произойти.
Оказывается, к этому представлению была применена анимация, которая заставила представление изменить его видимость на VISIBLE
до завершения анимации:
public void someFunction() {
...
TransitionManager.beginDelayedTransition(myViewGroup);
...
myViewGroup.setVisibility(View.GONE);
}
Если вы выполните отладку, вы увидите, что myViewGroup
действительно меняет видимость на GONE
, но прямо в следующем кадре он снова станет видимым для запуска анимации.
Итак, если вы столкнулись с такой ситуацией, убедитесь, что вы не выполняете проверку if
в разгар анимации вида.
Вы можете удалить все анимации в представлении с помощью View.clearAnimation () .