ОБНОВЛЕНИЕ: Как noted on the Issue Tracker, эта проблема исправлена с версии 24.2.0 библиотеки поддержки.
Я столкнулся с подобной ситуацией. Проблема заключается в том, что кнопка плавающего действия не считает себя показанной или скрытой, пока не появится анимация show/hide завершена.
Так что, если вы вызываете hide();
, но затем звоните show();
, пока анимация скрыть не закончится, анимация шоу не будет запущена, потому что кнопка все еще установлена как уже в показанном состоянии.
Я не знаю, если это оптимальное решение, но я решил его следующим образом:
boolean fabShouldBeShown;
FloatingActionButton.OnVisibilityChangedListener fabListener = new FloatingActionButton.OnVisibilityChangedListener() {
@Override
public void onShown(FloatingActionButton fab) {
super.onShown(fab);
if(!fabShouldBeShown){
fab.hide();
}
}
@Override
public void onHidden(FloatingActionButton fab) {
super.onHidden(fab);
if(fabShouldBeShown){
fab.show();
}
}
};
public void methodWhereFabIsHidden() {
fabShouldBeShown = false;
myFab.hide(fabListener);
}
public void methodWhereFabIsShown() {
fabShouldBeShown = true;
myFab.show(fabListener);
}
Устанавливая наше собственное логическое значение наряду с этим слушателем мы можем иметь дело с этими прерванными ситуациями. Когда мы дойдем до конца анимации, мы проверяем, находимся ли мы в состоянии, которое мы действительно хотим, и если мы не перейдем к правильному.
ARGH !!! вот и все !!! вождение меня с ума с использованием postDelayed здесь и там, но обновление библиотеки сделал трюк. Спасибо, сэр! – rupps