Положите RecyclerView
внутрь ScrollView
. SwipeRefreshLayout
расширяет ViewGroup
и используется, чтобы позволить пользователю обновлять / обновлять содержимое представления с помощью жеста вертикальной прокрутки. Следовательно, он может обнаруживать жесты вертикальной прокрутки, сделанные пользователями, но сам по себе он и не работает как представление прокрутки.
Ваш код должен быть преобразован во что-то вроде следующего:
<FrameLayout
android:id="@+id/topFrameLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:layout_marginEnd="2dp"
android:visibility="visible"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/bk_linearlayout">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/bk_swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/bk_recycler_view"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" />
</ScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</FrameLayout>
Чтобы получить общее представление о том, как использовать SwipeRefreshLayout
, обратитесь к этой статье . Также см. официальную документацию .
Сводка о SwipeRefreshLayout (из официальной документации)
SwipeRefreshLayout следует использовать всякий раз, когда пользователь может обновить содержимое представления с помощью жеста вертикальной прокрутки. Операция, которая создает экземпляр этого представления, должна добавить OnRefreshListener, который будет уведомляться всякий раз, когда жест пролистывания для обновления завершен. SwipeRefreshLayout будет уведомлять слушателя каждый раз, когда жест завершается снова; слушатель отвечает за правильное определение того, когда на самом деле инициировать обновление своего контента. Если слушатель определяет, что не должно быть обновления, он должен вызвать setRefreshing (false), чтобы отменить любую визуальную индикацию обновления. Если действие хочет показать только анимацию прогресса, оно должно вызвать setRefreshing (true). Чтобы отключить жест и анимацию прогресса, вызовите setEnabled (false) в представлении.
Этот макет должен быть родительским для представления, которое будет обновлено в результате жеста и может поддерживать только один прямой дочерний элемент. Этот вид также станет целью жеста и будет соответствовать ширине и высоте, указанным в этом макете. SwipeRefreshLayout не предоставляет события доступности; вместо этого должен быть предоставлен пункт меню, позволяющий обновлять содержимое везде, где используется этот жест.