web-dev-qa-db-ja.com

Nested Scrollviewスクロール内のRecyclerviewが、通常のRecyclerviewまたはNested Scrollviewのように高速スクロールしない

RecyclerView内でNestedScrollViewを使用していますが、動作します。しかし、RecyclerViewなどの中でLinearLayoutを使用すると、ジェスチャーに応じてさまざまな速度でスクロールします。スクロールはジェスチャーに耳を傾けます。少しだけ上にスライドすると少しスクロールし、本当に上にスライドすると非常に速くスクロールします。今、私の問題はRecyclerView内のNestedScrollViewが確かにスクロールするが、高速スクロールが機能しないことです。ただし、RecyclerViewまたはNestedScrollViewは高速または低速で上にスライドしますが、少しだけスクロールします。

スクロールビュー内でNestedScrollViewまたはRecyclerViewをさまざまな速度でスクロールするにはどうすればよいですか?

89

試してみる

recyclerView.setNestedScrollingEnabled(false);
252
Yang Peiyong

デフォルトでは、setNestedScrollingEnabledはAPI-21の後にのみ機能します。

ViewCompat.setNestedScrollingEnabled(recyclerView, false);を使用して、API-21(Lollipop)の前後でネストされたスクロールを無効にできます。 ドキュメントへのリンク

この助けを願っています!

50
Hemant Kaushik

私はAndroid 16で作業していましたが、setNestedSCrollEnabledメソッドを使用することはできませんでしたが、

RecyclerViewがスクロールを処理しないようにするために私がやることになります。

LinerLayoutManagerと同様、canScrollHorizo​​ntallyを作成し、canScrollVerticallyを作成してデフォルトでfalseを返します。

myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
            @Override
            public boolean canScrollHorizontally() {
                return false;
            }

            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });
21
Zain Ali

何度か繰り返した後、私は解決策を思いつきました。

  1. RecyclerViewを使用している場合:

    recyclerView.setNestedScrollingEnabled(false);
    
  2. NestedScrollingView内でLinearLayoutを使用している場合、通常のScrollView内でLinearLayoutを取得し、そのスクロールを

    scrollView.setNestedScrollingEnabled(false);
    
6
Sarthak Gandhi
recyclerView.setNestedScrollingEnabled(false);

便利な場合もありますが、常に使用することはお勧めできません。なぜなら、レシレサービューではビューリサイクル機能が無効になるからです。

代替案:

CollapsiveToolbarLayoutをリサイクルビューで試してください。 collapsiveTollbarレイアウトに他のビューを配置します。

1
Rajesh.k

Android:overScrollMode = "never

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


    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="vertical">

        <Android.support.v7.widget.RecyclerView
            Android:id="@+id/recyclerView"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content" />

    </LinearLayout>
 </Android.support.v4.widget.NestedScrollView>
1
Maryam Azhdari

私もこの問題に出会いました。そして、26.1.0にアップグレードして修正します。

0
linkaipeng

OnMeasureメソッドをオーバーライドするExtendRecyclerViewクラスでScrollViewを使用できます。それは私のために働く!

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthSpec, expandSpec);
}
0