2016-12-01 23 views
5

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

+0

Możesz użyć NestedScrollView jako rodzic RecyclerView. To może pomóc. –

+0

+0

To nie pomoże. A 'RecyclerView' obsługuje już zagnieżdżony przewijany widok z samego pudła już ... – prom85

Odpowiedz

0

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) { 

       } 
      }); 
     } 
+1

to całkowicie wyłączy funkcję zamykania, ale mogę sprawdzić, czy' RecyclerView' jest przewijany do góry, to powinno działać – prom85

+0

nie działa dla Nestedscrollview –

0

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.

Powiązane problemy