2016-01-14 15 views
19

La mia domanda è proprio come questa domanda Scroll behavior in nested RecyclerView with horizontal scrollnidificato RecyclerView con CoordinatorLayout

Proprio come Google Play negozio, ho un RecyclerView annidato (orizzontale) all'interno di un RecyclerView genitore. Il genitore RecyclerView è un figlio di CoordinatorLayout in cui la barra degli strumenti si espande e collassa quando si verifica lo scrolling di RecyclerView genitore.

Tutto funziona bene sul tocco al di fuori del bambino RecyclerView e scorrere verso l'alto CollapsingToolbar ottenere crollato ma quando tocco uno dei bambino RecyclerView e scorrere fino poi il genitore RecyclerView ottenere scorrere e CollapsingToolbar non funziona.

enter image description here

enter image description here

Se richiedono quindi vorrei aggiungere il mio codice sorgente qui ..

Qualsiasi aiuto sarà apprezzato !!

UPDATE:

attività CoordinatorLayout

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
android:id="@+id/coord_layout" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".activity.ChannelHubOld"> 

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

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed" 
     app:contentScrim="?attr/colorPrimary" 
     android:fitsSystemWindows="true"> 
     <RelativeLayout 
      android:background="@color/pkDarkGrey" 
      android:fitsSystemWindows="true" 
      android:layout_width="match_parent" 
      android:layout_height="200dp"> 

      <ImageView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:scaleType="centerCrop" 
       android:src="@drawable/sidebar_header"/> 
     </RelativeLayout> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/my_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?android:attr/actionBarSize" 
      android:theme="@style/ActionBarWidget"/> 

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

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

<!-- Parent RecyclerView ---> 

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

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

risposta

32

Aveva lo stesso problema. Risolto impostando setNestedScrollingEnabled(false) sulle RecyclerViews annidate orizzontali. Sembra che lo scroll annidato non sia stato intercettato correttamente dallo CoordinatorLayout.Behavior quando non lo hai impostato. Provalo!


NOTA: si hanno anche per aggiungere un comportamento di layout (esempio: app:layout_behavior="@string/appbar_scrolling_view_behavior") per l'interno RecyclerView (nested) per far funzionare tutto

+2

sì ... l'ho già risolto! ho bisogno di applicare layoutBehavior in xml per NestedRecycler e quindi setNestedScrollingEnabled su false. –

+0

@ fast3r Sei il mio eroe. Questa deve essere una risposta accettata - funziona perfettamente. –

+1

Perfetto! Grazie. – motis10

0

Controllare Creating Collapsing effect. questo potrebbe aiutarti.

codice dal collegamento se il collegamento si interrompe.

<android.support.design.widget.CollapsingToolbarLayout 
      android:id="@+id/collapsing_toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fitsSystemWindows="true" 
      app:contentScrim="?attr/colorPrimary" 
      app:expandedTitleMarginEnd="64dp" 
      app:expandedTitleMarginStart="48dp" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       app:layout_scrollFlags="scroll|enterAlways"></android.support.v7.widget.Toolbar> 

</android.support.design.widget.CollapsingToolbarLayout> 
+0

ancora senza fortuna !! –

+0

add per layout manager come questo LinearLayoutManager mLayoutManager = new LinearLayoutManager (this); // usa un gestore di layout lineare myUpdatedProductsListRecyclerView.setLayoutManager (mLayoutManager); – Harsha

-2

Ho una soluzione per te e l'ho provato di recente, quindi dovrebbe funzionare.

All'interno del tuo recyclerview, inserisci il tuo nestedScrollView invece del contrario come suggerito Scroll behavior in nested RecyclerView with horizontal scroll.

<android.support.v7.widget.RecyclerView 
     android:id="@+id/my_recycler_view" 
     android:scrollbars="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

      <android.support.v4.widget.NestedScrollView 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:fillViewport="true" 
       > 
      </android.support.v4.widget.NestedScrollView> 

    </android.support.v7.widget.RecyclerView> 
+0

hi @Simon Wont l'app si arresta in modo anomalo? E rispondi nel link che hai fornito afferma RecyclerView in NestedScrollView ma la tua risposta è opposta ad essa. –

+0

Sì. È il contrario. Dovrebbe funzionare. Provalo. – Simon

+0

provato ora. App in crash. Lanci: Causato da: java.lang.IllegalStateException: RecyclerView non ha LayoutManager –

Problemi correlati