2016-02-08 13 views
5

Sto usando multipla View-titolare all'interno riciclatore che inserito all'interno di vista di scorrimento nidificato, v'è un cambiamento nel comportamento naturale di onBindViewHolder() vista Recycler a causa di nidificati Scroll, getItemViewType() tutti gli elementi sono chiamati all'interno onBindViewHolder() quando si avvia l'adattatore del riciclatore, Ad esempio I ha 20 articoli significa nello scenario normale solo tre elementi chiamati all'avvio, ma in caso di vista di scorrimento nidificata tutte le 20 viste vengono create al primo caricamento.Recyclerview con scrollview interno annidato?

Xml File

<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> 
+0

Recyclerview all'interno Scrollview non è mai una buona idea. Suppongo che tu abbia dato un'altezza fissa a Recyclerview. Penso che dov'è il problema. – Hein

+0

@Hein Ho usato solo il contenuto a capo, ma la vista di scorrimento nidificata assegna lo spazio completo per il riciclatore – appukrb

+0

Puoi inserire il suddetto file di layout? – Hein

risposta

2

rimuovere NestedScrollView e frameLayout, e impostare app:layout_behavior="@string/appbar_scrolling_view_behavior" per recycleView come questo:

<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> 
0

Il problema è sia Recyclerview e NestedScrollview sono scorrevole. Rimuovendone uno, dovresti essere in grado di ottenere l'effetto desiderato.

Quindi, provare a utilizzare solo Recyclerviewsenza metterlo all'interno di NestedScrollView. Come questo:

<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> 

È inoltre possibile fare riferimento this example o leggere questo article from Code path about how to handle scroll with CoordinatorLayout

CheeseSquare from Chris Bane ha anche un buon esempio CoordinatorLayout

0

Ho riscontrato lo stesso problema anche dopo l'aggiornamento della libreria di supporto Android 23.2.0.

Set RecyclerView 's android:layout_height a match_parent.

E disattivare la funzione nuova Misurazione automatica (read more):

LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), 
    LinearLayoutManager.VERTICAL, false); 
layoutManager.setAutoMeasureEnabled(false); 
recyclerView.setLayoutManager(layoutManager); 
+0

OnBindViewHolder() non chiama e la vista non viene visualizzata – GvSharma

Problemi correlati