Comment ajouter un fast-scroller à la RecyclerView
Fond
Sur la Liste, vous pouvez avoir un rapide molette qui vous a permis de vous faire glisser une barre de défilement pour naviguer facilement à l'endroit où vous l'avez souhaité (à l'aide de fastScrollEnabled attribut)
Avec "SectionIndexer" de la classe et éventuellement de certains attributs, vous pourriez avoir une belle fenêtre qui montre que vous utilisez cette barre de défilement (lien ici).
Une telle chose est indiqué sur l'application contacts de sorte que vous pouvez faire défiler facilement les lettres spécifiques.
Le problème
RecyclerView ne semble pas avoir l'un de ceux-ci. Même pas un rapide de défilement.
La question
Comment puis-je ajouter un rapide molette de la fonctionnalité pour le RecyclerView?
InformationsquelleAutor android developer | 2015-01-06
Vous devez vous connecter pour publier un commentaire.
Je suis tombé sur cette question il y a quelques jours quand j'ai couru dans cette situation. Voici mon exemple de mise en œuvre de FastScroll pour RecyclerView:
github.com/danoz73/RecyclerViewFastScroller
Essayez d'exécuter l'exemple de l'application, et de parcourir le code pour voir un assez simple utilisation d'un simple RecyclerViewFastScroller widget. Il y a des informations sur github, mais je vais inclure l'utilisation de base ici pour une verticale rapide molette.
Pour un exemple complet, consultez le exemple d'application dans le repo.
D'Utilisation De Base De
Dans l'activité ou le fragment XML où votre RecyclerView réside, comprennent une VerticalRecyclerViewFastScroller objet. L'exemple suivant est dans une relative mise en page:
Dans votre fragment ou d'une activité où vous le programme d'installation de mise en page de la programmation, le raccordement de la rapide molette pour le recycleur:
Espérons que cette aide!
MODIFIER: Il y a maintenant ajouté le support pour Android Lollipop-Contacts-section style indicateurs de! Découvrez la exemple d'application est mise en œuvre pour plus de détails.
Depuis toutes les bibliothèques tierces eu des problèmes, j'ai décidé de réunir ce que je peux trouver (surtout à partir de ici), fixer le tout et de publier mon COP de la rapide molette de la RecyclerView :
https://github.com/AndroidDeveloperLB/LollipopContactsRecyclerViewFastScroller
utilisation:
faire un RecyclerView.Adaptateur qui implémente BubbleTextGetter, qui a donné une position dans les données de renvoyer le texte à afficher dans la bulle-popup.
position de la FastScroller à l'intérieur de la mise en page contenant le RecyclerView (probablement à la zone de droite).
Personnaliser la FastScroller FastScroller
Quelques inconvénients:
Code:
BubbleTextGetter
recycler_view_fast_scroller__fast_scroller.xml
MainActivity
FastScroller
Il y a beaucoup de questions sans réponse au sujet de
RecyclerView
et rapide de défilement/section de l'indexeur, nous allons essayer de regrouper et rassembler nos opinions et d'informations ici.La réponse courte est: NON, vous ne pouvez pas activer la rapidité de défilement parce que RecyclerView ne contient pas de FastScroller objet et ni en toute logique, les variables d'état. Cela parce que
RecyclerView
n'est pas un AbsListView.D'autre part, il n'est pas impossible à mettre en œuvre un
RecyclerView
qui contient un sous-évaluées version deFastScroller
et la logique nécessaire pour la rapidité de défilement, mais je n'ai pas vu de mise en œuvre de cette mesure.Veuillez nous faire part de votre réflexion à ce sujet ou si vous pensez que j'ai tort.
RecyclerView
n'était pas destiné à être utilisé avec un FastScroller. Il est contre la philosophie et l'idée de la conception de la liste infinie. Mais il n'y a rien qui va arrêter d'essayer de bien 🙂Android Support Library 26.0.0 prend désormais en charge
fastScrollEnabled
Nouveau fastScrollEnabled indicateur booléen pour RecyclerView.
Si l'option est activée, fastScrollHorizontalThumbDrawable, fastScrollHorizontalTrackDrawable, fastScrollVerticalThumbDrawable, et fastScrollVerticalTrackDrawable doit être définie.
Échantillon https://android.jlelse.eu/fast-scrolling-with-recyclerview-2b89d4574688
state_pressed="true"
, point avecstate_selected="true"
et juste la normale élément au sein de laselector
. Ainsi, vous aurez les 3 éléments dans le sélecteur.Vous pouvez tout aussi bien utiliser Un Z-Fastscroll pour RecyclerView. C'est l'iOS style.
https://github.com/code-computerlove/FastScrollRecyclerView/
Comment l'utiliser:
android.support.v7.widget.RecyclerView
aveccom.codecomputerlove.fastscrollrecyclerviewdemo.FastScrollRecyclerView
getMapIndex()
. La fonction doit retourner la mapIndex. Regarder danscalculateIndexesForName()
pour trouver de l'inspiration sur la façon de le créer. Une fois créé, le passer à la carte dans le constructeur.FastScrollRecyclerViewItemDecoration
et l'ajouter sur votre RecyclerViewFastScrollRecyclerViewItemDecoration decoration = new FastScrollRecyclerViewItemDecoration(this); mRecyclerView.addItemDecoration(decoration);
<dimen name="fast_scroll_overlay_text_size">100dp</dimen>
à votre/values/dimens.xml
fichier. C'est le dp de la taille de la superposition lettreVous pouvez essayer notre lib: https://github.com/FutureMind/recycler-fast-scroll. C'est encore au début de leur développement, mais a été construit spécifiquement pour traiter avec douceur question, nous avons expérimenté avec d'autres bibliothèques. Il utilise un peu mécanisme différent. Il prend en charge horizontale LayoutManager ainsi et sera également en charge multi-colonne de configurations dans un avenir proche.
Edit: il y a bien des options de personnalisation maintenant.
FastScroller fonctionnalité est ajoutée à partir d'android bibliothèque 26.0.0 pour RecyclerView
compiler dépendance
ajouter depedency de projet.gradle
votre recyclerview.xml fichier
thumb.xml
line.xml
thumb_drawable.xml
line_drawble.xml
Il y a une disposition de la mise en œuvre des barres de défilement avec
RecycleView
et sesLayoutManager
.Par exemple:
computeVerticalScrollExtent()
,computeVerticalScrollOffset()
etcomputeVerticalScrollRange()
peut fournir des informations de toujours de positionnement de défilement verticale de pouce au bon endroit.Ces méthodes sont également là dans
LayoutManager
pour la délégation de mesures réelles. Ainsi, leLayoutManager
de mise en œuvre utilisés doivent prendre en charge ces mesures.Aussi, glissez appuyez sur le curseur de défilement peuvent être interceptés par des raisons impérieuses
onInterceptTouchEvent()
deRecyclerView
. Et après le calcul de la désirée de défilement,scrollTo()
peut être appelée pour mettre à jourRecyclerView
.Il suffit d'activer le défilement rapide et ajouter un pouce, tracker pour la barre de défilement comme ci-dessous.