2015-11-29 4 views
6

У меня есть кнопка с плавающим действием (FAB) и задача Async, вызывающая FAB.hide() перед загрузкой некоторых данных в фоновом режиме и FAB.show() после ее завершения. По какой-то причине, даже несмотря на то, что в моем консольном журнале ясно показано, что вызов всегда выполняется, чтобы скрыть(), а затем показать(), иногда FAB скрывается, но не отображается, пока задача не будет выполнена снова.android floating action button show() not working

UPDATE

Проблема, кажется, произойдет, если звонки слишком близко. Я действительно пробовал код:

fab.hide(); 
fab.show(); 

и та же проблема возникает (fab не отображается). Любые идеи для этого?

ответ

11

ОБНОВЛЕНИЕ: Как 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); 
} 

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

4

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

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

+0

ARGH !!! вот и все !!! вождение меня с ума с использованием postDelayed здесь и там, но обновление библиотеки сделал трюк. Спасибо, сэр! – rupps