0

У меня есть фрагмент с координаторомLayout и FrameLayout для заполнения другими фрагментами. Один из этих фрагментов содержит один RecyclerView. Мой вопрос в том, как RecyclerView может работать с CoordinatorLayout, каждый из которых находится в файле. Я попытался поместить NestedScrollView в качестве родителя фрагмента, но когда я делаю это, «onBindViewHolder» адаптера RecyclerView вызывается для всех элементов.КоординаторLayout с RecyclerView в разных фрагментах

Главный фрагмент содержит CoordinatorLayout

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:background="@color/background"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:minHeight="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
      android:elevation="0dp" 
      app:layout_scrollFlags="scroll|enterAlwaysCollapsed"/> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tab_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/toolbar" 
      android:background="@color/colorTab" 
      android:minHeight="?attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

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

    <FrameLayout 
     android:id="@+id/container_restaurant" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

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

Фрагмент с RecyclerView

<android.support.v4.widget.NestedScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" 
    android:background="@color/background" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/my_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

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

Таким образом прокрутки работает, но «onBindViewHolder» вызывается для всех перечисленных пунктов, в том числе тех, кто не " видимым». Если я помещу LinearLayout вместо NestedScrollView, «onBindViewHolder» работает правильно, но поведение прокрутки («@ string/appbar_scrolling_view_behavior») с CoordinatorLayout не работает.

+0

Если вы используете 'NestedScrollView' обернуть' RecyclerView'. Функция рециркуляции не будет работать. И он будет использовать больше памяти и лагов. – wonsuc

ответ

0

ScrollView рисует все его дочерние элементы. Это означает, что ваш Recyclerview теряет свойства утилизации, когда он находится внутри Scrollview. Вот почему для всех предметов вызывается onBindViewHolder. Также это неправильное поведение.

Попытайтесь держать родителей в FrameLayout с поведением прокрутки ("@ строка/appbar_scrolling_view_behavior")

+0

Я понимаю, но изменение NestedScrollView по FrameLayout не работает для прокрутки. Он работает, если FrameLayout находится в том же файле, что и CoordinatorLayout. –

+0

Попробуйте изменить высоту вашего FrameLayout (который присутствует внутри coordinatorlayout) на 'match_parent'. – jitinsharma

+0

Не работает. Я думаю, что проблема в NestedScrollView всякий раз, когда я использую его, все элементы загружаются в onBindViewHolder. Я пытался установить высоту NestedScrollView, не работал. Есть еще один макет, который я мог бы использовать вместо NestedScrollView и имел поведение прокрутки? –