Recyclerview con el interior scrollview anidado?

Hay un cambio en el comportamiento natural de onBindViewHolder () Recycler vista debido a desplazamiento anidado, getItemViewType () todos los elementos se llaman dentro onBindViewHolder () cuando se inicia el adaptador de reciclador, Por ejemplo, tengo 20 elementos significa en el escenario normal sólo tres elementos llamados cuando se inician, pero en el caso de la vista de desplazamiento anidado todas las 20 vistas crean en la primera carga.

Archivo Xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/light_gray_vd"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:contentScrim="@color/primaryColor" app:expandedTitleMarginEnd="16dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" app:layout_collapseMode="parallax"> <include android:id="@+id/inc_gallery" layout="@layout/proj_galery_new" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </FrameLayout> <View android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar1" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_gravity="top" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> <include android:id="@+id/toolbar_header_view" layout="@layout/header_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" /> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:id="@+id/vde_mv_scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <FrameLayout android:id="@+id/rlCollapseScroll" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/view_recycler" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> </FrameLayout> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout> 

Quitar NestedScrollView y frameLayout y establecer la app:layout_behavior="@string/appbar_scrolling_view_behavior" para recycleView como este:

 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/light_gray_vd"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:contentScrim="@color/primaryColor" app:expandedTitleMarginEnd="16dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" app:layout_collapseMode="parallax"> <include android:id="@+id/inc_gallery" layout="@layout/proj_galery_new" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </FrameLayout> <View android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar1" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_gravity="top" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> <include android:id="@+id/toolbar_header_view" layout="@layout/header_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" /> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/view_recycler" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:scrollbars="vertical"> </android.support.v7.widget.RecyclerView> </android.support.design.widget.CoordinatorLayout> 

El problema es tanto Recyclerview como NestedScrollview son desplazables. Al eliminar uno, debe ser capaz de lograr el efecto que quería.

Por lo tanto, intente usar sólo Recyclerview sin ponerlo en NestedScrollView . Me gusta esto :

 <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/light_gray_vd" > <android.support.design.widget.AppBarLayout android:id="@+id/app_bar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" > <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:contentScrim="@color/primaryColor" app:expandedTitleMarginEnd="16dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed" > <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" app:layout_collapseMode="parallax" > <include android:id="@+id/inc_gallery" layout="@layout/proj_galery_new" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </FrameLayout> <View android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar1" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_gravity="top" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" > <include android:id="@+id/toolbar_header_view" layout="@layout/header_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" /> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/view_recycler" android:layout_width="match_parent" android:layout_height="wrap_content" /> </android.support.design.widget.CoordinatorLayout> 

También puede hacer referencia a este ejemplo o leer este artículo de la ruta de código acerca de cómo manejar scroll con CoordinatorLayout

CheeseSquare de Chris Bane también tiene un buen ejemplo de CoordinatorLayout

También tuve el mismo problema después de la actualización de Android Support Library 23.2.0.

Establezca el android:layout_height RecyclerView android:layout_height para match_parent .

Y deshabilite la nueva función de automeasure ( lea más ):

 LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false); layoutManager.setAutoMeasureEnabled(false); recyclerView.setLayoutManager(layoutManager); 
  • ListView no se expande dentro de NestedScrollView
  • NestedScrolling con NestedScrollView, RecyclerView (Horizontal), dentro de un CoordinatorLayout
  • Prueba Espresso NestedScrollView - "Error al ejecutar 'desplazamiento a' en vista 'con id:"
  • FrameLayout no coincide con altura de NestedScrollView
  • Webview dentro de NestedScrollView causa problema de altura
  • RecyclerView no recicla vistas cuando lo usa dentro de NestedScrollView
  • Ocultar FAB en NestedScrollView al desplazarse
  • Cómo poner RecyclerView dentro de NestedScrollView?
  • Cómo puedo crear un diseño nestedScroll como este?
  • Habilitar scroll intertial en NestedScrollView (Android Studio)
  • Vista de Scrollview anidada + Recycler
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.