Mam BottomSheetDialogFragment
z RecyclerView
. Problem polega na tym, że chcę wyłączyć funkcję "przeciągnij i zamknij" z BottomSheetDialogFragment
tak długo, jak RecyclerView
nie jest przewijany w górę (obecnie nie mogę przewinąć mojego RecyclerView
, ponieważ próba zawsze zamknie BottomSheetDialogFragment
). Wszelkie pomysły, jak to osiągnąć?BottomSheetDialogFragment - Pozwól na przewijanie dziecka
Odpowiedz
zmienić zachowanie w BottomSheetDialogFragment w metodzie setupDialog:
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams();
final CoordinatorLayout.Behavior behavior = layoutParams.getBehavior();
if (behavior != null && behavior instanceof BottomSheetBehavior) {
((BottomSheetBehavior) behavior).setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dismiss();
}
if (newState == BottomSheetBehavior.STATE_DRAGGING) {
((BottomSheetBehavior) behavior).setState(BottomSheetBehavior.STATE_EXPANDED);
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
}
to całkowicie wyłączy funkcję zamykania, ale mogę sprawdzić, czy' RecyclerView' jest przewijany do góry, to powinno działać – prom85
nie działa dla Nestedscrollview –
tylko traktować go jako BottomSheetDialog, po prostu wyłączyć i jego ciągnięcia lub przesuwania Gdy funkcja Touch.
Kiedy utworzyć BottomSheetDialog, zostanie automatycznie owinąć swój układ w CoordinatorLayout, więc jeśli chcesz uzyskać zachowanie z widoku, zadzwoń
ostatecznej zachowanie BottomSheetBehavior = BottomSheetBehavior .from ((Widok) view.getParent());
Dzięki temu zachowaniu możesz zrobić to, czego potrzebujesz.
final BottomSheetBehavior behavior = BottomSheetBehavior.from((View) view.getParent());
behavior.setHideable(false);
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
To zadziałało dla mnie. Mam nadzieję, że pomoże.
Możesz użyć NestedScrollView jako rodzic RecyclerView. To może pomóc. –
To nie pomoże. A 'RecyclerView' obsługuje już zagnieżdżony przewijany widok z samego pudła już ... – prom85