Как использовать RecyclerView внутри вложенного представления прокрутки в Android - PullRequest
0 голосов
/ 08 мая 2019

[Обновление] Добавлен стиль и весь макет

У меня есть RecyclerView внутри NavigationView, но он не прокручивается, чтобы отобразить весь список элементов. Я пытался использовать NestedScrollView, как описано в ответе, но он не работал

<android.support.v4.widget.NestedScrollView
        android:layout_marginTop="30dp"
        android:id="@+id/herdchatHerdsNestedSV"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/cats_recycler_view"
            style="@style/catsRrecyclerView"
            android:background="@color/colorAccent"
            android:scrollbars="vertical"
            android:transcriptMode="alwaysScroll"
            android:nestedScrollingEnabled="true"/>
        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>

но этот способ не сработал, поэтому я сейчас пробую этот метод

<android.support.design.widget.NavigationView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:id="@+id/navigation_view"
    android:layout_gravity="start"
    android:scrollbars="vertical">

    <android.support.v7.widget.RecyclerView
            android:id="@+id/cats_recycler_view"
            style="@style/catsRrecyclerView"
            android:background="@color/colorAccent"
            android:scrollbars="vertical"
            android:transcriptMode="alwaysScroll"
            android:nestedScrollingEnabled="true"/>

</android.support.design.widget.NavigationView>

Style

<style name="catsRrecyclerView">
    <item name="android:layout_below">@id/pages_layout</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:scrollbars">vertical</item>
</style>

Весь макет

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<android.support.design.widget.NavigationView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true"
    android:id="@+id/navigation_view"
    android:layout_gravity="start"
    android:scrollbars="vertical">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/cats_recycler_view"
        style="@style/catsRrecyclerView"
        android:background="@color/colorAccent"
        android:scrollbars="vertical"
        android:transcriptMode="alwaysScroll"
        android:nestedScrollingEnabled="true"/>

</android.support.design.widget.NavigationView>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ProgressBar
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:id="@+id/loading_indicator"
        style="@style/Widget.AppCompat.ProgressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>

    <TextView
        style="@style/notification_textView"
        android:id="@+id/notification_view"
        android:text="No Data Found" />

    <LinearLayout
        android:id="@+id/pages_layout"
        style="@style/pages_layout">

        <Button
            android:id="@+id/next_page"
            style="@style/prev_page.next_page"/>

        <TextView
            android:id="@+id/page_number"
            style="@style/page_number"
            android:text="Page 1"/>
        <Button
            android:id="@+id/prev_page"
            style="@style/prev_page" />



    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        style="@style/recyclerView" />

  </LinearLayout>

</android.support.v4.widget.DrawerLayout>

вертикальная полоса прокрутки видна, но не прокручивается. В чем здесь проблема и как ее исправить?

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Проблема заключалась в размещении NavigationView в верхней части макета чуть ниже корня.Изменив положение до конца макета после того, как другие виды заставили его работать нормально.

0 голосов
/ 08 мая 2019

Попробуйте изменить высоту прямого родителя RecyclerView на wrap_content:)

В первом примере:

<android.support.v4.widget.NestedScrollView
    android:layout_marginTop="30dp"
    android:id="@+id/herdchatHerdsNestedSV"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- The height of this one -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/cats_recycler_view"
            style="@style/catsRrecyclerView"
            android:background="@color/colorAccent"
            android:scrollbars="vertical"
            android:transcriptMode="alwaysScroll"
            android:nestedScrollingEnabled="true"/>

    </LinearLayout>

</android.support.v4.widget.NestedScrollView>

Или во втором примере (имейте в виду, что это может привести к непредсказуемым результатам, если список меньше размера экрана, поскольку ваше корневое представление не совпадает с родительским по высоте):

<!-- The height of this one -->
<android.support.design.widget.NavigationView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true"
    android:id="@+id/navigation_view"
    android:layout_gravity="start"
    android:scrollbars="vertical">

    <android.support.v7.widget.RecyclerView
            android:id="@+id/cats_recycler_view"
            style="@style/catsRrecyclerView"
            android:background="@color/colorAccent"
            android:scrollbars="vertical"
            android:transcriptMode="alwaysScroll"
            android:nestedScrollingEnabled="true"/>

</android.support.design.widget.NavigationView>

Посмотри, поможет ли это?

...