2017-02-15 7 views
2

Я создал BottomSheetDialog, в котором есть GridView. Когда откроется BottomSheetDialog, вы можете прокрутить до. Это делает вывод BottomSheetDialog на полный экран и обычно прокручивается в GridView.Как прокручивать вверх в GridView, который находится в BottomSheetDialog?

Однако, когда пользователь пытается прокрутить до; вместо прокрутки в GridView, BottomSheetDialog сжимается и закрывается.

Я хочу, чтобы прокручивать вверх и вниз в GridView без BottomSheetDialog изменение размеров.

Как это сделать?

Мой код:

final BottomSheetDialog dialog = new BottomSheetDialog(context); 
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.grid, null); 
dialog.setContentView(view); 

grid.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <GridView 
     android:background="#FFFFFF" 
     android:id="@+id/gridview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:numColumns="3" 
     android:stretchMode="columnWidth" 
     android:horizontalSpacing="4dp" 
     android:verticalSpacing="4dp" 
     android:gravity="center" 
     /> 

</LinearLayout> 

ответ

2

Решено:

dialog.setOnShowListener(new DialogInterface.OnShowListener() { 
       @Override 
       public void onShow(final DialogInterface dialog) { 
        BottomSheetDialog d = (BottomSheetDialog) dialog; 
        FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet); 
        // Right here! 
        final BottomSheetBehavior behaviour = BottomSheetBehavior.from(bottomSheet); 
        behaviour.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { 
         @Override 
         public void onStateChanged(@NonNull View bottomSheet, int newState) { 
          if (newState == BottomSheetBehavior.STATE_HIDDEN) { 
           dialog.dismiss(); 
          } 

          if (newState == BottomSheetBehavior.STATE_DRAGGING) { 
           ((BottomSheetBehavior) behaviour).setState(BottomSheetBehavior.STATE_EXPANDED); 
          } 
         } 

         @Override 
         public void onSlide(@NonNull View bottomSheet, float slideOffset) { 

         } 
        }); 
       } 
      }); 

 Смежные вопросы

  • Нет связанных вопросов^_^