J'ai une liste d'enregistrements dans une vue de liste que je veux que l'utilisateur puisse re-trier à l'aide d'une méthode de glisser-déposer. J'ai vu cela implémenté dans d'autres applications, mais je n'ai pas trouvé de tutoriel pour cela. Cela doit aussi être quelque chose dont les autres ont besoin. Quelqu'un peut-il me diriger vers un code pour faire cela?
132
Réponses:
J'y travaille depuis un certain temps maintenant. Difficile de bien faire, et je ne prétends pas le faire, mais j'en suis content jusqu'à présent. Mon code et plusieurs démos se trouvent sur
Son utilisation est très similaire au TouchInterceptor (sur lequel le code est basé), bien que d' importantes modifications d'implémentation aient été apportées.
DragSortListView a un défilement fluide et prévisible tout en faisant glisser et mélanger des éléments. Les mélanges d'éléments sont beaucoup plus cohérents avec la position de l'élément glissant / flottant. Les éléments de liste de hauteur hétérogène sont pris en charge. Le défilement par glisser-déposer est personnalisable (je démontre le défilement rapide par glisser-déposer dans une longue liste - pas qu'une application me vienne à l'esprit). Les en-têtes / pieds de page sont respectés. etc.?? Regarde.
la source
Maintenant, c'est assez facile à mettre en œuvre
RecyclerView
avec ItemTouchHelper . Remplacez simplement laonMove
méthode deItemTouchHelper.Callback
:Un très bon tutoriel à ce sujet peut être trouvé sur medium.com: Glisser-faire glisser avec RecyclerView
la source
J'ajoute cette réponse aux fins de ceux qui recherchent sur Google à ce sujet.
Il y a eu un épisode de DevBytes ( ListView Cell Dragging and Rearranging ) récemment qui explique comment faire cela
Vous pouvez le trouver ici aussi l'exemple de code est disponible ici .
Ce que fait ce code, c'est qu'il crée un
dynamic listview
par l'extension delistview
qui prend en charge le glissement et l'échange de cellules. Pour que vous puissiez utiliser le à laDynamicListView
place de votre baseListView
et c'est tout, vous avez implémenté un ListView avec glisser-déposer.la source
La bibliothèque DragListView fait cela très bien avec un très bon support pour les animations personnalisées telles que les animations d'élévation. Il est également toujours entretenu et mis à jour régulièrement.
Voici comment vous l'utilisez:
1: Ajoutez d'abord la bibliothèque pour graduer
2: Ajouter une liste à partir de xml
3: Définissez l'écouteur glisser
4: créer un adaptateur remplacé à partir de DragItemAdapter
5: implémenter un visualiseur qui s'étend de DragItemAdapter.ViewHolder
Pour plus d'informations, rendez-vous sur https://github.com/woxblom/DragListView
la source
J'ai trouvé que DragSortListView fonctionnait bien, bien que commencer cela aurait pu être plus facile. Voici un bref tutoriel sur son utilisation dans Android Studio avec une liste en mémoire:
Ajoutez ceci aux
build.gradle
dépendances de votre application:Créez une ressource pour l'ID de poignée de glissement en créant ou en ajoutant à
values/ids.xml
:Créez une mise en page pour un élément de liste qui inclut votre image de poignée de glissement préférée et attribuez son ID à l'ID que vous avez créé à l'étape 2 (par exemple
drag_handle
).Créez une disposition DragSortListView, quelque chose comme ceci:
Définissez un
ArrayAdapter
dérivé avec ungetView
remplacement qui rend votre vue d'élément de liste.Définissez un écouteur de dépôt qui réorganise les éléments lorsqu'ils sont déposés.
la source
Je suis récemment tombé sur ce grand Gist qui donne une implémentation fonctionnelle d'une sorte de drag
ListView
, sans dépendances externes nécessaires.Fondamentalement, il consiste à créer votre adaptateur personnalisé s'étendant en
ArrayAdapter
tant que classe interne à l'activité contenant votreListView
. Sur cet adaptateur, on définit ensuite unonTouchListener
sur vos éléments de liste qui signalera le début du glissement.Dans ce Gist, ils définissent l'auditeur sur une partie spécifique de la mise en page de l'élément de liste (la "poignée" de l'élément), de sorte que l'on ne le déplace pas accidentellement en appuyant sur une partie de celui-ci. Personnellement, j'ai préféré aller avec un à la
onLongClickListener
place, mais c'est à vous de décider. Voici un extrait de cette partie:Cela implique également l'ajout d'un
onTouchListener
àListView
, qui vérifie si un élément est déplacé, gère l'échange et l'invalidation et arrête l'état de glissement. Un extrait de cette partie:Enfin, voici à quoi ressemblent les méthodes
stopDrag
etstartDrag
, qui gèrent l'activation et la désactivation du processus de glissement:la source