2016-09-13 21 views
0

浮動アクションボタンの位置を、表示されたり消えたりするスナップバーに応じて変更したい。スナックバーは自分でタイムアウトしてもうまくいくが、スナックバーは手動で解除されても機能しない。後者の場合、onDependentViewRemovedの位置を設定したいが、スナップバーをタイムアウトすると、onDependentViewChangedとonDependentViewRemovedの両方が呼び出されるため、いくつかの問題が発生する。したがって、私は何とかonDependentViewChangedまたはonDependentViewRemovedで特定のスナックバーが閉じられたりタイムアウトした場合に検出できるようにしたいと考えています。これらのスナックバーは複数のフラグメントに表示され、それらのすべてにフローティングアクションボタンがあるわけではないため、スナックバーのビューをフローティングアクションボタンに設定することはオプションではありません。浮動アクションボタンの動作でこのようなイベント/状態の検出が可能かどうか誰かが知っているのだろうか?私が今持っているものだAndroid:コーディネーターレイアウトの動作でsnackbarを終了またはタイムアウトすることを検出する

@Override 
    public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { 
     if ((child instanceof FloatingActionMenu || 
       child instanceof FloatingActionButton) && 
       (dependency instanceof Snackbar.SnackbarLayout || 
         dependency instanceof AHBottomNavigation)) { 
      this.updateTranslation(parent, child, dependency); 
     } 

     return false; 
    } 

    @Override 
    public void onDependentViewRemoved(CoordinatorLayout parent, View child, View dependency) { 
     if ((child instanceof FloatingActionMenu || 
       child instanceof FloatingActionButton) && 
       dependency instanceof Snackbar.SnackbarLayout) { 

      this.updateTranslation(parent, child, dependency); 
     } 
    } 

私が言ったようしかし、位置は台無しにされているか、時にはアプリがクラッシュ両方のメソッドが呼び出される時(スナックバーがタイムアウト)。誰か助けてくれますか?

答えて

2

デフォルトの動作はFloatingActionButtonです。あなたのケースに反応しています。 android.support.design.widget.FloatingActionButton.Behaviorを調べて、FloatingActionButtonSnackbarに反応している理由を確認してください。

すばやくソースコードに見てからは、オーバーライドする必要があります:あなたは、これらの関数呼び出しのすべてを見ることができた

private void updateFabTranslationForSnackbar(CoordinatorLayout parent, final FloatingActionButton fab, boolean animationAllowed)

この関数からコードをコピーするとうまくいくはずです。

関連する問題