BottomSheet: проблема с вложенной прокруткой (RecyclerView & NestedScrollView) - PullRequest
0 голосов
/ 08 июня 2019

У меня довольно комплекс BottomSheetLayout, который выглядит следующим образом

Корневой вид моего нижнего листа - это пользовательский FrameLayout, который позволяет скруглить его угол (как фоновый, так и дочерний). Ничего другого (ничего касающегося)

Затем я использую обычный ConstraintLayout для разметки моего нижнего листа.

Этот ConstraintLayout содержит, помимо прочего, вертикальный RecyclerView:

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="10dp">

    <!-- other views -->

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/events"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginTop="25dp"
        android:layout_marginBottom="74dp"
        app:layout_constraintTop_toBottomOf="@+id/days"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:background="@{viewModel.colors.defaultBackgroundColor}"
        tools:background="#ECF0F3"
        android:orientation="vertical"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        tools:listitem="@layout/event_item"
        tools:itemCount="10" />

</androidx.constraintlayout.widget.ConstraintLayout>

У меня нет особых проблем при перетаскивании моего нижнего листа, однако при полном раскрытии я ожидал, что смогу прокрутить содержимое моего RecyclerView. Но я не могу.

После многих исследований мне удалось сделать это прокруткой, включив прокрутку, когда мое мнение Fragment завышено:

ViewCompat.setNestedScrollingEnabled(this.binding.bottomSheetEvents.getRoot(), true);

Однако это имеет странное следствие. Когда состояние моего нижнего листа равно EXPANDED, я, наконец, могу прокрутить свой RecyclerView, но тогда уже нет абсолютно никакого способа перетащить мой Нижний лист: он остается полностью развернутым.

Я пробовал несколько других способов.

  1. Я попытался обернуть NestedScrollView. В прошлом я мог прокручивать все содержимое нижнего листа благодаря NestedScrollView, но в этом случае я хочу прокрутить только RecyclerView. Все, что выше, должно оставаться без дела.
  2. Я устал this.binding.bottomSheetEvents.events.setNestedScrollingEnabled(false);, но нет никакой разницы.

Я считаю, что когда нижний лист полностью раскрывается, он отправляет события прокрутки внутренним дочерним элементам, которые могут его поддерживать. И, наоборот, он знает, в какой-то момент, когда использует желание свернуть упомянутый нижний лист. Так что, наверное, там что-то не так.

Дополнительная информация:

  • эта нижняя таблица включена в мой фрагмент, вид корней которого, очевидно, CoordinatorLayout.
  • фрагмент также размещен в CoordinatorLayout с AppBar
  • включаемый макет использует app:layout_behavior="@string/bottom_sheet_behavior"
  • и макет включения также использует behavior_fitToContents, установленный на false , так что я могу использовать метод setExpandedOffset, чтобы нижний лист не достигал вершины.
  • Используемая версия: 1.1.0-alpha07

Спасибо за помощь!

...