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);
}

установив наше собственное логическое значение вместе с этим слушателем, мы можем иметь дело с этими прерванными ситуациями. Когда мы добираемся до конца анимации, мы проверяем, находимся ли мы в том состоянии, в котором мы действительно хотим быть, и если нет, мы меняем его на правильный.


исправлено в библиотеке поддержки 24.2.0:

https://code.google.com/p/android/issues/detail?id=216469