android плавающая кнопка действия show () не работает
У меня есть кнопка плавающего действия (FAB) и асинхронная задача, которая вызывает FAB.hide () перед загрузкой некоторых данных в фоновом режиме и FAB.show () после того, как это будет сделано. По какой-то причине, хотя мой журнал консоли ясно показывает, что вызов всегда выполняется, чтобы скрыть (), а затем показать (), иногда FAB скрывает, но не показывает, пока задача не будет выполнена снова.
обновление
проблема возникает, если вызовы слишком близки. Я действительно пробовал код:
fab.hide();
fab.show();
и та же проблема возникает (fab не отображается). Есть идеи, как с этим справиться?
2 ответов
обновление: As отмечено на трекере проблем эта проблема была исправлена в версии 24.2.0 библиотеки поддержки.
я столкнулся с аналогичной ситуацией. Проблема заключается в том, что плавающая кнопка действия не считает себя показанной или скрытой, пока она не покажет/не скроет анимацию закончил.
Так что если вы называете 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);
}
установив наше собственное логическое значение вместе с этим слушателем, мы можем иметь дело с этими прерванными ситуациями. Когда мы добираемся до конца анимации, мы проверяем, находимся ли мы в том состоянии, в котором мы действительно хотим быть, и если нет, мы меняем его на правильный.