2017-02-19 3 views
1

ich umgesetzt haben BottomSheetDialog wie folgt zu erhalten:Android: Failing BottomSheetDialog Zustandsänderung Rückrufe

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

Ich versuche, auf die Zustandsänderungen von Bodenblech (Expanded/Komprimiert/Versteckt) mit diesem Code zu hören:

Mein BottomSheet zeigt ordnungsgemäß, aber ich sehe nie die Toast des Staates wird geändert. Mache ich es falsch?

+0

Ich bin ein ähnliches Problem haben. Hast du es irgendwann herausgefunden? –

Antwort

0

Ich versuchte zunächst onCreateView Methode im Fragment zu Setup-Layout zu überschreiben, aber Bottom Sheet Statusänderungen wurden nicht gemeldet. Ich konnte nur nach dem Überschreiben der setupDialog-Methode in meinem BottomSheetDialogFragment anstelle von onCreateView auf Zustandsänderungen warten. Hier ist der Beispielcode

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); 
    } 
} 

}