web-dev-qa-db-fra.com

Comportement de défilement dans RecyclerView imbriqué avec défilement horizontal

Je dois créer une RecyclerView verticale avec une RecyclerView horizontale imbriquée dans chaque élément. Tout est dans CoordinatorLayout. Lorsque je fais défiler en appuyant sur l'extérieur de la barre d'outils RecyclerView imbriquée se cache, mais lorsque je fais défiler parent, Recycler en appuyant sur une barre d'outils imbriquée reste. 

Toute aide serait appréciée.

Voici mes mises en page xml:

main_activity.xml:

<Android.support.design.widget.CoordinatorLayout 
   ...>

<FrameLayout
    Android:id="@+id/fragment_frame"
    ...
    Android:fitsSystemWindows="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

<Android.support.design.widget.AppBarLayout
    ...
    Android:fitsSystemWindows="true"
    Android:id="@+id/appbar_layout">

        <include layout="@layout/toolbar"/>

</Android.support.design.widget.AppBarLayout>
</Android.support.design.widget.CoordinatorLayout>

Voici toolbar.xml:

<Android.support.v7.widget.Toolbar
    Android:id="@+id/main_toolbar"
    ...
    Android:fitsSystemWindows="true"
    app:layout_scrollFlags="scroll|enterAlways">

    <TextView .../>

</Android.support.v7.widget.Toolbar>

fragment.xml:

<Android.support.v7.widget.RecyclerView
    ...
    Android:scrollbars="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

Et recycler_view_item.xml:

<RelativeLayout ...>

    <TextView .../>

    <!-- fixme(CullyCross) fix bug with hiding toolbar -->
    <Android.support.v7.widget.RecyclerView
        ...
        Android:scrollbars="horizontal"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        />

</RelativeLayout>

Merci,
Anton

25
Anton Shkurenko

Comme demandé, voici la solution que j'ai trouvée assez bonne jusqu'à présent:

Dans mon cas, j'ai une nestedScrollView avec 4 RecyclerViews définie pour faire défiler horizontalement à l'intérieur. Pour chacun de ces RecyclerViews j'ai fait ceci par programme: 

restaurantsRecylerView.setHasFixedSize(true); 
restaurantsRecylerView.setNestedScrollingEnabled(false);

Vous ne voulez probablement pas le fixedSize, vous ne savez pas si cela fera une différence, ma liste est toujours 25 donc je peux l'utiliser pour des performances. Après avoir fait cela, je peux faire défiler sans problème même lorsque je touche à recyclerViews

J'espère que ça aide

51
Lancelot

Essayez avec RecyclerView dans Android.support.v4.widget.NestedScrollView .

<Android.support.v4.widget.NestedScrollView
        Android:id="@+id/nScrollView"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

<!-- Set other views of your Layout -->

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

Essayez également avec différents layout_scrollFlags in Toolbar et 

RecylerView.setNestedScrollingEnabled(false); // set it true or false as per requirement
20
Priyank Patel

Nous pouvons y arriver en XML

Android:nestedScrollingEnabled="false"
0
pratham kesarkar