2015-11-29 13 views
6

バックグラウンドでデータを読み込む前にFAB.hide()を呼び出し、終了後にFAB.show()を呼び出す非同期タスクがあります。なんらかの理由で、私のコンソールログには、hide()とshow()の呼び出しが常に行われていることがはっきりと示されていますが、FABは表示されないことがあります。アンドロイドフローティングアクションボタンshow()は動作しません

UPDATE

問題は、呼び出しが近すぎる場合に発生するようです。実際にコードを試しました。

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

同じ問題が発生します(ファブが表示されません)。 これを処理するためのアイデアはありますか?

答えて

11

更新:noted on the Issue Trackerとこの問題は、サポートライブラリのバージョン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で修正された

関連する問題