Не могу прокрутить просмотрщик - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь реализовать Recyclerview, но просто не могу сделать его прокручиваемым. Я прочитал несколько веток в StackOverflow, но не смог найти ни одной, чтобы решить мою проблему. Я думаю, что есть что-то, связанное с MapView, потому что у меня есть другое подобное действие без карт, которое я могу прокрутить, но я все еще не знаю, как исправить в этом случае.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"
  tools:context=".activities.BookmarkActivity">

  <com.google.android.gms.maps.MapView android:id="@+id/bk_mapView" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintHeight_default="percent" app:layout_constraintHeight_percent="0.4" android:layout_marginTop="0dp" app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" />

  <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/bk_linearlayout" android:visibility="visible" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/bk_mapView">

    <TextView android:id="@+id/radlabel" android:layout_width="wrap_content" android:layout_height="25dp" android:layout_marginStart="4dp" android:layout_marginTop="2dp" android:layout_marginBottom="8dp" android:hint="@string/bk_radiusName" android:textAlignment="center"
      android:textSize="15sp" android:textStyle="bold" app:layout_constraintBottom_toTopOf="@+id/bk_textName" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />

    <SeekBar android:id="@+id/bk_seekBar" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:layout_marginEnd="8dp" android:max="1000" android:min="10" android:progress="50" app:layout_constraintEnd_toStartOf="@+id/bk_imageButton"
      app:layout_constraintHorizontal_weight="1" app:layout_constraintStart_toEndOf="@+id/radlabel" app:layout_constraintTop_toTopOf="parent" />


    <ImageButton android:id="@+id/bk_imageButton" android:layout_width="25dp" android:layout_height="25dp" android:layout_marginEnd="8dp" android:background="@android:drawable/ic_input_add" app:layout_constraintEnd_toEndOf="parent" />

    <EditText android:id="@+id/bk_textName" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="2dp" android:layout_marginTop="4dp" android:layout_marginEnd="8dp" android:hint="@string/bk_bookmarkName" android:inputType="textCapWords"
      android:maxLength="30" android:textSize="15sp" app:layout_constraintEnd_toStartOf="@+id/bk_notify" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/bk_seekBar" />

    <CheckBox android:id="@+id/bk_notifyWifiOnly" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="WifiOnly" android:visibility="gone" android:layout_marginTop="4dp" android:layout_marginEnd="4dp" android:layout_marginBottom="2dp"
      app:layout_constraintBottom_toBottomOf="@+id/bk_textName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/bk_seekBar" />

    <CheckBox android:id="@+id/bk_notify" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Notify" android:layout_marginTop="4dp" android:layout_marginEnd="4dp" android:layout_marginBottom="2dp" app:layout_constraintBottom_toBottomOf="@+id/bk_textName"
      app:layout_constraintEnd_toStartOf="@+id/bk_notifyWifiOnly" app:layout_constraintTop_toBottomOf="@+id/bk_seekBar" />

  </androidx.constraintlayout.widget.ConstraintLayout>


  <FrameLayout android:id="@+id/emptyFrameLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginTop="2dp" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" android:visibility="invisible"
    app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/bk_linearlayout">

    <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginStart="2dp" android:layout_marginTop="4dp" android:textAlignment="center" android:layout_marginBottom="150dp" android:textSize="20sp" android:textStyle="bold|italic"
      android:text="None Here" app:layout_constraintTop_toTopOf="parent" />

  </FrameLayout>


  <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">

      <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" />

    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

  </FrameLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

Фактический скриншот макета здесь:

enter image description here

1 Ответ

0 голосов
/ 02 июня 2019

Положите 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 не предоставляет события доступности; вместо этого должен быть предоставлен пункт меню, позволяющий обновлять содержимое везде, где используется этот жест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...