Android - вид снизу вниз

Как сказано в заголовке, у меня проблема с моим нижним листом.

На нижнем листе мне нужен RecyclerView с динамическими элементами, которые могут меняться в любое время. Есть также компоненты до и после RecyclerView. Для удобства я положил фрагмент в нижний лист.

Вот мой нижний лист:

<android.support.v4.widget.NestedScrollView
    android:id="@+id/bsControllers"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:behavior_peekHeight="@dimen/controllerPeekHeight"
    app:layout_behavior="@string/bottom_sheet_behavior">

    <FrameLayout
        android:id="@+id/flBsContent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:behavior_hideable="false"/>
</android.support.v4.widget.NestedScrollView>

И вот мой фрагмент:

<android.support.constraint.ConstraintLayout
android:id="@+id/clControllerSheetRoot"
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="wrap_content"
android:background="@color/colorPrimary"
tools:context="fr.mld.dmg.view.fragment.ControllerSheetFragment">

<View
    android:id="@+id/vPeek"
    android:layout_width="0dp"
    android:layout_height="@dimen/controllerPeekHeight"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    android:background="@color/green"/>

<ProgressBar
    android:id="@+id/pbControllerScan"
    android:layout_width="0dp"
    android:layout_height="2dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/vPeek"/>

<ImageView
    android:id="@+id/ivBle"
    android:layout_width="36dp"
    android:layout_height="36dp"
    android:layout_marginStart="8dp"
    android:src="@drawable/ic_thread_online"
    app:layout_constraintBottom_toBottomOf="@+id/vPeek"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/vPeek"/>

<ImageView
    android:id="@+id/ivExpansionIndicator"
    android:layout_width="36dp"
    android:layout_height="36dp"
    android:layout_marginEnd="8dp"
    android:src="@drawable/ic_arrow_down"
    android:tint="@color/white"
    app:layout_constraintBottom_toBottomOf="@+id/vPeek"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="@+id/vPeek"/>

<TextView
    android:id="@+id/tvControllerCount"
    style="@style/BoldWhite"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="@+id/vPeek"
    app:layout_constraintEnd_toStartOf="@+id/ivLight"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintStart_toEndOf="@+id/ivBle"
    app:layout_constraintTop_toTopOf="@+id/vPeek"
    tools:text="3"/>

<ImageView
    android:id="@+id/ivLight"
    android:layout_width="24dp"
    android:layout_height="24dp"
    android:src="@drawable/ic_light_unselected"
    android:tint="@color/white"
    app:layout_constraintBottom_toBottomOf="@+id/vPeek"
    app:layout_constraintEnd_toStartOf="@+id/tvConnected"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/tvControllerCount"
    app:layout_constraintTop_toTopOf="@+id/vPeek"/>

<TextView
    android:id="@+id/tvConnected"
    style="@style/BoldWhite"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/connected"
    android:textAllCaps="true"
    app:layout_constraintBottom_toBottomOf="@+id/vPeek"
    app:layout_constraintEnd_toStartOf="@+id/ivExpansionIndicator"
    app:layout_constraintStart_toEndOf="@+id/ivLight"
    app:layout_constraintTop_toTopOf="@+id/vPeek"/>

<android.support.v7.widget.RecyclerView
    android:id="@+id/rvControllers"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    app:layout_constraintBottom_toTopOf="@+id/bConnectAll"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/vPeek"/>

<Button
    android:id="@+id/bConnectAll"
    style="@style/Button.ButtonWhiteStroke"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:layout_marginEnd="8dp"
    android:layout_marginStart="16dp"
    android:text="@string/connect_all"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@+id/bUpdateAll"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintStart_toStartOf="parent"/>

<Button
    android:id="@+id/bUpdateAll"
    style="@style/Button.ButtonWhiteStroke"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:layout_marginEnd="16dp"
    android:layout_marginStart="8dp"
    android:text="@string/update_all"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toEndOf="@+id/bConnectAll"/>

<View
    android:id="@+id/vTagUpdate"
    android:layout_width="8dp"
    android:layout_height="8dp"
    android:layout_marginEnd="4dp"
    android:layout_marginTop="4dp"
    android:background="@drawable/tag_warning"
    app:layout_constraintEnd_toEndOf="@+id/bUpdateAll"
    app:layout_constraintTop_toTopOf="@+id/bUpdateAll"/>
</android.support.constraint.ConstraintLayout>

Моя проблема

При первом запуске нижний лист прокручивается вниз по высоте взгляда. Когда я раскрываю его, а затем сворачиваю, он не прокручивается вниз по высоте. Кроме того, это происходит только в том случае, если в моем RecyclerView слишком много элементов, чтобы поместиться на высоте экрана, в противном случае он работает просто отлично.

Что я уже пробовал

  • Я попытался поместить NestedScrollView внутри фрагмента. Все еще прокручивается на высоту взгляда.
  • Я попытался сделать прокрутку NestedScrollView с помощью nestedscrollview.scrollTo(0,0). Ничего не меняет.
  • Я попытался полностью удалить NestedScrollView. RecyclerView перекрывает компонент до и после него.

Я действительно потерян здесь, и я действительно не знаю, что делать дальше. Любая помощь будет высоко ценится.

РЕДАКТИРОВАТЬ видео, чтобы лучше понять мою проблему: https://youtu.be/y8KhKW9KS_E

1 ответ

Решение

Следуя примеру @Cheticamp, я наконец понял, в чем проблема. При создании кажется, что RecyclerView фокусируется, в результате чего NestedScrollView прокручивается вверх.

Все, что мне нужно было сделать, это дать android:focusableInTouchMode="true" на зеленом фоне вид моего макета. Затем он сначала фокусируется и не прокручивается до верхней части RecyclerView.

Большое спасибо всем, кто помог мне разобраться!