Nested Scrollviewスクロール内のRecyclerviewですが、通常のRecyclerviewまたはNested Scrollviewのように高速スクロールしません。


96

私はRecyclerView内部NestedScrollViewを使用していますが、動作します。でもRecyclerViewLinearLayoutなどで使うと、ジェスチャーによって様々なスピードでスクロールしてしまいます。スクロールはジェスチャーを聞き、少しだけ上にスライドすると少しスクロールしますが、上に非常に速くスライドすると非常に速くスクロールします。今私の問題は、RecyclerView内部がNestedScrollView確かにスクロールするが、高速スクロールが機能しないことです。しかし、私は速いか遅い上にスライド、RecyclerViewまたはNestedScrollView少しだけスクロールします。

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


3
recyclerView.setNestedScrollingEnabled(false); これは本当にうまくいきます!
Aung Si Min Htet

stackoverflow.com/questions/27083091/…解決策はここにあります。
maruti060385 2017

回答:


266

試す

recyclerView.setNestedScrollingEnabled(false);

14
ただし、この設定では、recyclerviewはビューをリサイクルしません。それについてあなたの考えは何ですか?
MAY3AM

実際には、バナーやその他のビューも含むレイアウト内に、レイアウトマネージャー(線形レイアウトやグリッドレイアウトなど)が異なる2つ以上のリサイクルビューを追加しています。このようにリサイクラービューを処理するには、これらすべてを入れ子になったスクロールビュー内に配置してください。
Aung Si Min Htet

24
この回答がどのようにして多くの賛成票を得たかはわかりません。ネストされたスクロールを無効にすると、その目的が無効になります。ネストされたスクロールとリサイクラーを使用したい場合はどうなりますか?CoordinatorLayout、AppBarLayout、RecyclerView ??
Jimit Patel

@JimitPatelに感謝します。これは現時点でまさに私の問題です。ネストされたスクロールビュー内にリサイクルビューがあり、スクロールできません。stackoverflow.com/questions/41259756/...
Karoly

1
@Karolyはネストされたスクロールをカスタマイズする必要があります...私はそれをしています...それを数時間で投稿します...現在、私は旅行しています。ツールバー後のリサイクラービューで視差効果の問題に直面しました。
Jimit Patel 2017

53

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

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

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


22

私はこれがsetNestedSCrollEnabledメソッドを使用することが不可能であったAndroid 16で作業していました、

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;
            }
        });

これは実際に私のために働いた。LinearLinear内、ScrollView内にRecyclerViewがありました。
FonzTech 2017年

9

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

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

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

    scrollView.setNestedScrollingEnabled(false);

2

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

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

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

1
recyclerView.setNestedScrollingEnabled(false);

ときどき役に立ちます。しかし、それは、recylcerビューのビューリサイクル機能を無効にするため、常に推奨されるわけではありません。

代替案:

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


0

私もこの問題に遭遇しました。アップグレードして26.1.0修正してください。



-3

LinearLayoutなどの任意のレイアウトでリサイクラービューをラップし、RecyclerViewサイズを800dpなどの一定に設定する必要があります。これにより、スムーズなスクロールが可能になり、リサイクラービューはスクロール中にもリサイクラービューになります。

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                                xmlns:app="http://schemas.android.com/apk/res-auto"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="800dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>


1
これは、RecyclerViewの主な利点を損なうことなく表示スクロールの問題を修正し、表示されているビューのみをロードして見えないところにスクロールしたときにそれらをリサイクルする方法を示しているため、良い答えです。800dpのような固定値がすべての画面サイズと向きで機能するわけではないため、人々が反対票を投じた可能性がありますが、layout_height値はプログラムで計算および設定できます-少し面倒ですが、両方の問題が解決されます。
jk7 '13年

-3

これはWAIです。NestedScrollViewは、「未指定」の仕様で子を測定します。子供も好きなだけ成長することができます。

これは基本的にNSVとRVの高さに相当します。したがって、RVに関する限り、それは完全に表示されると信じています。

LLでRVを包み、RVに高さを与えます。LLはメジャースペックをUNSPECIFIEDに設定しないため、RVは提供するDPの設定された高さ内で正しくスクロールします。

このメソッドの唯一の欠点は、RVで親の一致を実行できないことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.