android 浮动操作按钮 show() 不工作

android floating action button show() not working

我有一个浮动操作按钮 (FAB) 和一个异步任务,它在后台加载一些数据之前调用 FAB.hide(),在完成后调用 FAB.show()。出于某种原因,即使我的控制台日志清楚地显示总是先调用 hide() 然后再调用 show(),但有时 FAB 会隐藏但不会显示,直到任务再次执行。

更新

如果通话距离太近,似乎会出现问题。我实际上尝试了代码:

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

并且出现了同样的问题(fab 未显示)。 有什么处理这个的想法吗?

更新:作为 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);
}

通过设置我们自己的布尔值和这个监听器,我们可以处理这些中断的情况。当我们到达动画的结尾时,我们检查我们是否处于我们真正想要的状态,如果不是,我们改变到正确的状态。

已在支持库 24.2.0 中修复:

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