web-dev-qa-db-ja.com

水平スクロールを使用したネストされたRecyclerViewのスクロール動作

すべてのアイテムにネストされた水平RecyclerViewを持つ垂直RecyclerViewを作成する必要があります。すべてがCoordinatorLayout内にあります。ネストされたRecyclerViewツールバーの外側をタップしてスクロールすると非表示になりますが、ネストされた1つのツールバーをタップして親Recyclerをスクロールすると残ります。

任意の助けをいただければ幸いです。

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

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

そして、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>

おかげで、
アントン

27
Anton Shkurenko

ここで要求されているのは、これまでのところ私が十分に見つけた解決策です:

私の場合、nestedScrollViewがあり、4つのRecyclerViewsが内部で水平にスクロールするように設定されています。これらのRecyclerViewsのそれぞれについて、これをプログラムで実行しました。

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

おそらくfixedSizeは必要ないでしょう。違いがあるかどうかわからないので、リストは常に25なので、パフォーマンスのためにそれを使用できます。これを行った後、recyclerViewsに触れても問題なくスクロールできます

それが役に立てば幸い

56
Lancelot

Android.support.v4.widget.NestedScrollView 内でRecyclerViewを試してください。

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

また、Toolbarで異なる layout_scrollFlags を試してください。

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

XMLでこれを実現できます

Android:nestedScrollingEnabled="false"
1