Comment faire pour désactiver RecyclerView de défilement?
Je ne peut pas désactiver le défilement dans l' RecyclerView
. J'ai essayé d'appeler rv.setEnabled(false)
mais je peux encore faire défiler.
Comment puis-je désactiver le défilement?
- Quel est le point de l'utilisation de
RecyclerView
si vous ne voulez pas de défilement? - Je veux juste le désactiver temporairement, par exemple, alors que je suis en train de faire une animation personnalisée avec l'un de ses enfants.
- Ah, OK, qui fait sens. J'avais l'avez probablement mettre un transparent
View
sur le haut de laRecyclerView
, le basculement entre lesVISIBLE
etGONE
que nécessaire, mais au large de la manchette de votre approche semble raisonnable. - L'espérance this aide à trouver une meilleure solution.
- voici ce que j'en ai besoin pour, par exemple. J'ai besoin d'afficher des images dans RecyclerView un à un, sans que partiellement visible des images, seul dans ma fenêtre d'affichage. Et il y a des flèches sur la gauche et sur la droite de laquelle l'utilisateur peut naviguer avec. Selon quelle est l'image actuellement affichée (ils sont de types différents), de certaines choses en dehors de RecyclerView sont déclenchées. C'est la conception que nos clients veulent.
- J'ai besoin de désactiver le défilement d'avoir aussi haut/bas balayez les directions. J'ai utiliser la grille de mise en page, pas une liste, et les articles sont toutes de taille moyenne, tels qu'ils sont visibles sur l'écran.
- Id je veux dynamiquement l'affichage de tous les éléments de la recycler vue sous un grand scrollview, puis de désactiver le défilement est utile .
Vous devez vous connecter pour publier un commentaire.
Vous devez remplacer le layoutmanager de votre recycleview pour cela. De cette façon, il sera seulement désactiver le défilement, aucun de ther autres fonctionnalités. Vous serez toujours en mesure de gérer de cliquer ou de tout autre événement de touche. Par exemple:-
Original:
Ici à l'aide de "isScrollEnabled" drapeau vous pouvez activer/désactiver la fonctionnalité de défilement de votre recycle-vue temporairement.
Aussi:
Simple de remplacer votre de mise en œuvre existantes pour désactiver le défilement et permettent de cliquer sur.
La vraie réponse est
Plus d'infos dans la documentation
NestedScrollView
:android.support.v4.widget.NestedScrollView
, comme décrit ici, par chessdork: stackoverflow.com/questions/37846245/...C'est un peu hackish solution de contournement, mais il fonctionne, vous pouvez activer/désactiver le défilement dans l'
RecyclerView
.C'est un vide
RecyclerView.OnItemTouchListener
voler tous les événements tactiles ainsi, la désactivation de la cibleRecyclerView
.De l'utiliser:
La VRAIE de VRAIE réponse est:
Pour les API de 21 ans et plus:
Aucun code java nécessaire.
Vous pouvez définir
android:nestedScrollingEnabled="false"
en xml:
Cela fonctionne pour moi:
Custom view 'RecyclerView' has setOnTouchListener called on it but does not override performClick
Créer une classe qui s'étendent RecyclerView classe
Cela va désactiver le défilement de l'événement, mais pas les événements click
L'utiliser dans vos XML procédez de la manière suivante:
Si vous venez de désactiver seulement la fonctionnalité de défilement de
RecyclerView
ensuite, vous pouvez utilisersetLayoutFrozen(true);
méthode deRecyclerView
. Mais il ne peut pas être désactivé événement tactile.Vous pouvez désactiver le défilement par le gel de votre RecyclerView.
De gel:
recyclerView.setLayoutFrozen(true)
Pour le débloquer:
recyclerView.setLayoutFrozen(false)
Une autre alternative est
setLayoutFrozen
, mais il est livré avec un tas d'autres effets secondaires.https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#setLayoutFrozen(boolean)
Prolonger la
LayoutManager
et remplacercanScrollHorizontally()
etcanScrollVertically()
pour désactiver le défilement.Être conscient que l'insertion d'éléments au début ne sera pas automatiquement faire défiler vers le début, pour obtenir autour de cette faire quelque chose comme:
Je sais que cela a déjà accepté de répondre, mais la solution ne prend pas en compte un cas d'utilisation que je suis venu à travers.
J'ai précisément besoin d'un élément d'en-tête qui était encore cliquable, pourtant désactivé le mécanisme de défilement de la RecyclerView. Ceci peut être accompli avec le code suivant:
A écrit un kotlin version:
utilisation:
Pour une raison quelconque @Alejandro Gracia réponse commence à travailler seulement après quelques secondes.
J'ai trouvé une solution qui bloque la RecyclerView instantanément:
Remplacer onTouchEvent() et onInterceptTouchEvent() et retourne la valeur false si vous n'avez pas besoin OnItemTouchListener à tous.
Cela ne désactive pas OnClickListeners de ViewHolders.
en XML :-
Vous pouvez ajouter
android:nestedScrollingEnabled="false"
de l'enfant RecyclerView mise en page fichier XML
ou
en Java :-
childRecyclerView.setNestedScrollingEnabled(false);
à votre RecyclerView dans du code Java.
À L'Aide De ViewCompat (Java) :-
childRecyclerView.setNestedScrollingEnabled(false);
ne fonctionnera que dans android_version>21 appareils. pour travailler dans tous les appareils d'utilisation suivantesViewCompat.setNestedScrollingEnabled(childRecyclerView, false);
Vous pouvez ajouter cette ligne après la configuration de votre adaptateur
Maintenant votre recyclerview travaillera avec défilement lisse
J'ai été à la peine dans cette question, pour quelques heures,
Donc, je tiens à partager mon expérience,
Pour le layoutManager solution c'est bien, mais si tu veux réactiver le défilement du recycleur sera de retour vers le haut.
La meilleure solution à ce jour (du moins pour moi) est à l'aide de @Zsolt Safrany methode, mais l'ajout de getter et setter de sorte que vous n'avez pas à supprimer ou à ajouter de la OnItemTouchListener.
Comme suit
Utilisation
Juste ajouter ceci à votre recycleview en xml
comme ce
Il est vraiment de réponse simple.
Le code ci-dessus désactive RecyclerView à défilement vertical.
Voici comment je l'ai fait avec la liaison de données:
En place de la "vraie", j'ai utilisé une variable booléenne qui a changé en fonction d'une condition, de sorte que le recycleur point de vue de l'interrupteur entre le fait d'être désactivé et activé.
Tombé sur un fragment qui contient plusieurs RecycleView donc j'ai seulement besoin d'une barre de défilement au lieu d'une barre de défilement dans chaque RecycleView.
Donc j'ai juste mis le ScrollView dans le conteneur parent qui contient les 2 RecycleViews et l'utilisation
android:isScrollContainer="false"
dans le RecycleViewAjouter
à votre enfant de SrollView ou NestedScrollView (et le parent de ListView, recyclerview et gridview un)
Il est plus simple de désactiver le défilement (techniquement, c'est plutôt plus à l'interception d'un défilement de l'événement et d'y mettre fin lorsqu'une condition est remplie), juste en utilisant la fonctionnalité standard.
RecyclerView
a la méthode diteaddOnScrollListener(OnScrollListener listener)
, et en utilisant seulement cela, vous pouvez arrêter le défilement, juste pour:Cas d'utilisation:
Disons que vous voulez désactiver le défilement lorsque vous cliquez sur l'un des éléments à l'intérieur de
RecyclerView
de sorte que vous pourriez effectuer certaines actions, sans être distrait par mégarde le défilement à un autre élément, et quand vous avez fini avec elle, il suffit de cliquer sur l'élément nouveau pour activer le défilement. Pour cela, vous voulez joindreOnClickListener
pour chaque élément dansRecyclerView
, de sorte que lorsque vous cliquez sur un élément, il basculeisItemSelected
defalse
àtrue
. De cette façon, lorsque vous essayez de faire défiler,RecyclerView
appelle automatiquement la méthodeonScrollStateChanged
et depuisisItemSelected
ensemble detrue
, il s'arrête immédiatement, avantRecyclerView
eu la chance, eh bien... pour les faire défiler.Remarque: pour une meilleure ergonomie, essayez d'utiliser
GestureListener
au lieu deOnClickListener
pour éviteraccidental
clics.stopScroll()
n'est pas de figer le défilement, c'est juste pour arrêter/arrêter le défilement recyclerview.isItemSelected
ensemble detrue
. Sinon, vous auriez besoin d'un custom RecyclerView pour désactiver le défilement pour de bon et je voulais éviter car j'ai besoin d'un peu plus de la fonctionnalité de cette solution.