(Вложенный) ScrollView и RecyclerView, отвечающие друг другу

У меня небольшая проблема с прокруткой на экране. Макет выглядит следующим образом:

<LinearLayout 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:orientation="vertical">

  <android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
      android:id="@+id/my_account_parent_layout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical"
      app:layout_behavior="@string/appbar_scrolling_view_behavior">

       <!--- Views omitted --->
    </LinearLayout>
  </android.support.v4.widget.NestedScrollView>

  <android.support.v7.widget.RecyclerView
    android:id="@+id/my_account_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</LinearLayout>

Проблема в том, что recyclerview не может находиться в Scrollview/NestedScrollView, поэтому он находится вне прокрутки. Теперь мне нужны представления, завернутые в LinearLayout, который обернут вокруг NestedScrollView, для прокрутки вверх, когда пользователь прокручивает любое из представлений (RecyclerView и все остальные над ним). Несмотря на то, что вокруг других представлений есть прокрутка, они не понимают, что могут прокручивать экран, даже если у recyclerview есть контент за пределами экрана?

Спасибо


person x10sion    schedule 27.03.2017    source источник
comment
Можете ли вы опубликовать свой полный xml-файл, содержащий макет ??   -  person Suraj Makhija    schedule 27.03.2017
comment
@SurajMakhija готово   -  person x10sion    schedule 27.03.2017
comment
Хорошо, это хорошо   -  person Suraj Makhija    schedule 27.03.2017


Ответы (2)


Да, не рекомендуется добавлять RecyclerView внутри ScrollView, но вы можете добавить собственный заголовок в recyclerView.

Следуйте этому сообщению здесь

Это хороший пост SO для добавления заголовка в ваш RecyclerView.

Итак, здесь вы можете добавить LinearLayout, который находится внутри вашего ScrollView, в качестве первого дочернего элемента (заголовка) вашего recyclerview, и тогда, я полагаю, он должен работать так, как вы этого хотите!

Что сделает вас окончательным макетом для этого экрана только так:

  <android.support.v7.widget.RecyclerView
    android:id="@+id/my_account_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

Где LinearLayout будет надуваться в адаптере RV как в посте!

person MadScientist    schedule 27.03.2017

Вы можете использовать CoordinatorLayout и app:layout_scrollFlags . Когда recyclerview прокручивается вверх, макет внутри AppBarLayout будет прокручиваться вверх.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:elevation="0dp">

        <LinearLayout
      android:id="@+id/my_account_parent_layout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical"
      app:layout_scrollFlags="scroll|enterAlways">


    </LinearLayout>

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

    <android.support.v7.widget.RecyclerView
    android:id="@+id/my_account_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />


</android.support.design.widget.CoordinatorLayout>
person RoShan Shan    schedule 27.03.2017