我有一个浮动操作按钮(FAB)和一个异步任务,它在后台加载一些数据之前调用FAB.hide(),并在完成之后调用FAB.show()。出于某种原因,即使我的控制台日志清楚地显示一直在调用hide()然后show(),有时FAB会隐藏但不会显示,直到再次执行任务。
更新
如果电话太近,问题似乎就会发生。我实际上尝试了代码:
fab.hide();
fab.show();
并且出现同样的问题(fab未显示)。 处理这个的任何想法?
答案 0 :(得分:11)
更新:自noted on the Issue Tracker起,此问题已从版本24.2.0的支持库中修复。
我遇到了类似的情况。问题似乎是浮动动作按钮在显示/隐藏动画完成之前不会认为自己显示或隐藏。
因此,如果您在隐藏动画完成之前调用hide();
但是然后调用show();
,那么show动画将不会运行,因为按钮仍然设置为已显示状态。< / p>
我不知道这是否是最佳解决方案,但我解决了以下问题:
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);
}
通过设置我们自己的布尔值以及这个监听器,我们可以处理这些中断的情况。当我们到达动画结束时,我们检查我们是否处于我们实际想要的状态,如果不是,我们将改为正确的状态。
答案 1 :(得分:4)
已在支持库24.2.0中修复: