2016-01-14 27 views
19

Moje pytanie jest jak to pytanie Scroll behavior in nested RecyclerView with horizontal scrollZagnieżdżony RecyclerView z CoordinatorLayout

Podobnie jak w sklepie Google Play, mam zagnieżdżonych RecyclerView (poziomo) wewnątrz RecyclerView macierzystej. Nadrzędny widok RecyclerView jest elementem podrzędnym elementu CoordinatorLayout, w którym pasek narzędzi rozwija się i zwija, gdy następuje przewijanie nadrzędnego okna RecyclerView.

Wszystko działa poprawnie na dotyk poza dziecka RecyclerView i przewijać w górę CollapsingToolbar się zawalił, ale kiedy dotknąć jedną z dziecka RecyclerView i przewijać w górę następnie rodzica RecyclerView uzyskać przewijane i CollapsingToolbar nie działa.

enter image description here

enter image description here

Jeśli wymagają potem dodam mój kod źródłowy tutaj ..

Każda pomoc będzie mile widziane !!

UPDATE:

aktywność 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> 

Odpowiedz

32

Miał ten sam problem. Naprawiono, ustawiając setNestedScrollingEnabled(false) na poziomym zagnieżdżonym RecyclerViews. Wygląda na to, że zagnieżdżony zwój nie został poprawnie przechwycony przez CoordinatorLayout.Behavior, gdy nie jest ustawiony. Wypróbuj to!


UWAGA: trzeba także dodać zachowanie układu (na przykład: app:layout_behavior="@string/appbar_scrolling_view_behavior") do wewnętrznej (zagnieżdżone) RecyclerView to zadziałało

+2

tak ... już to rozwiązałem! Muszę zastosować layoutBehavior w xml dla NestedRecycler, a następnie setNestedScrollingEnabled na false. –

+0

@ fast3r Jesteś moim bohaterem. To musi być akceptowana odpowiedź - działa dobrze. –

+1

Idealny! Dzięki. – motis10

0

Odjazd Creating Collapsing effect. to może ci pomóc.

kod z linku, jeśli link zostanie zerwany.

<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

nadal bez powodzenia !! –

+0

dodaj do menedżera układu jak ten LinearLayoutManager mLayoutManager = new LinearLayoutManager (this); // użyj menedżera układu liniowego myUpdatedProductsListRecyclerView.setLayoutManager (mLayoutManager); – Harsha

-2

Mam rozwiązanie dla Ciebie i próbowałem to ostatnio, więc powinno działać.

Wewnątrz widoku recycler, umieścić w nestedScrollView zamiast na odwrót, jak sugerowano 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 Czy aplikacja się nie zawiesi? I odpowiedź w linku podałeś podana jest informacja RecyclerView wewnątrz NestedScrollView, ale odpowiedź ur jest przeciwna. –

+0

Tak. Jest odwrotnie. Powinno działać. Spróbuj. – Simon

+0

próbowałem teraz. Aplikacja się zawiesiła. Zgłasza: Wywołany przez: java.lang.IllegalStateException: RecyclerView nie ma Menedżera układu –

Powiązane problemy