2017-02-19 17 views
1

は、私はこのようなBottomSheetDialogを実装している:アンドロイド:BottomSheetDialogの状態変更のコールバックの受信に失敗

addLinkSheet = new BottomSheetDialog(this); 
addLinkSheetView = getLayoutInflater().inflate(R.layout.dialog_quickadd_wagrouplink, null); 
addLinkSheet.setContentView(addLinkSheetView); 
addLinkSheet.show(); 

私はこのコードを使用して(拡大/ /隠し折りたたみ)ボトムシートの状態の変化を聞くしようとしています:

My BottomSheetが正しく表示されていますが、Toastの状態が変更されることはありません。私はそれを間違っているのですか?

+0

私は同様の問題を抱えています。あなたは最終的にそれを理解しましたか? –

答えて

0

フラグメント分割レイアウトの初期設定で、onCreateViewメソッドをオーバーライドしようとしましたが、ボトムシートの状態の変更に通知されませんでした。 onCreateViewではなく、BottomSheetDialogFragmentのsetupDialogメソッドをオーバーライドした後でのみ、状態の変更をリッスンすることができました。ここでは、サンプルコード

public class AddMetricFragment extends BottomSheetDialogFragment { 

BottomSheetBehavior.BottomSheetCallback bottomSheetCallback = new BottomSheetBehavior.BottomSheetCallback() { 
    @Override 
    public void onStateChanged(@NonNull View bottomSheet, int newState) { 
     // React to state change 
      Log.d("logtag", "Bottom Sheet State " + newState); 
    } 

    @Override 
    public void onSlide(@NonNull View bottomSheet, float slideOffset) { 
     // React to dragging events 

    } 
}; 

@Override 
public void setupDialog(Dialog dialog, int style) { 
    super.setupDialog(dialog, style); 

    contentView = View.inflate(getContext(), R.layout.bottom_sheet_layout, null); 
    dialog.setContentView(contentView); 
    CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams(); 
    CoordinatorLayout.Behavior behavior = layoutParams.getBehavior(); 
    if (behavior != null && behavior instanceof BottomSheetBehavior) { 
     ((BottomSheetBehavior) behavior).setBottomSheetCallback(bottomSheetCallback); 
    } 
} 

}

関連する問題