web-dev-qa-db-fra.com

Recyclerview dans le défilement imbriqué Scrollview mais ne défile pas rapidement comme d'habitude dans le Recyclerview ou le défilement imbriqué

J'utilise RecyclerView à l'intérieur de NestedScrollView et cela fonctionne. Mais lorsque j'utilise RecyclerView à l'intérieur de LinearLayout ou quelque chose du genre, le défilement s'effectue à une vitesse variable en fonction du geste. Le défilement écoute le geste et si je glisse un peu vers le haut, alors il défile un peu tandis que si je glisse très vite, alors il défile très vite. Maintenant, mon problème est que RecyclerView à l'intérieur de NestedScrollView défile certainement mais le défilement rapide ne fonctionne pas. Cependant, je glisse rapidement ou lentement, RecyclerView ou NestedScrollView défile seulement un peu.

Comment puis-je faire défiler mon NestedScrollView ou RecyclerView à l'intérieur de cette vue de défilement à différentes vitesses?

89
Aung Si Min Htet

essayer

recyclerView.setNestedScrollingEnabled(false);
254
Yang Peiyong

Par défaut, setNestedScrollingEnabled ne fonctionne qu'après API-21.

Vous pouvez utiliser ViewCompat.setNestedScrollingEnabled(recyclerView, false); pour désactiver le défilement imbriqué avant et après API-21 (Lollipop). Lien vers la documentation .

J'espère que cette aide!

50
Hemant Kaushik

Je travaillais sur Android 16 où l'utilisation de la méthode setNestedSCrollEnabled n'était pas possible,

Ce que je finis par faire pour empêcher RecyclerView de gérer les Scrolls.

Comme dans LinerLayoutManager, j'ai créé canScrollHorizontally, canScrollVertically pour retourner false par défaut.

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

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

Après plusieurs itérations, j'ai trouvé une solution.

  1. Si vous utilisez RecyclerView, alors:

    recyclerView.setNestedScrollingEnabled(false);
    
  2. Si vous utilisez LinearLayout dans NestedScrollingView, insérez LinearLayout dans un ScrollView normal, puis définissez son défilement sur

    scrollView.setNestedScrollingEnabled(false);
    
7
Sarthak Gandhi

Android: overScrollMode = "jamais

  <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>
2
Maryam Azhdari
recyclerView.setNestedScrollingEnabled(false);

Sera utile parfois.Mais ce n'est pas conseillé pour toutes les fois.parce qu'il désactive la fonctionnalité de recyclage de la vue dans la vue recyclage.

Alternatives:

Essayez CollapsiveToolbarLayout avec la vue Recycler. mettre d'autres vues dans la disposition collapsiveTollbar.

1
Rajesh.k

J'ai aussi rencontré ce problème. Et mettre à niveau vers 26.1.0 le résoudre.

0
linkaipeng

Vous pouvez utiliser ScrollView avec la classe ExtendRecyclerView qui remplace la méthode onMeasure. Ça marche pour moi!

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