Sélectionnez des éléments dans RecyclerView
Question similaire a été demandé, mais je ne peux pas obtenir tout de leur travail.
Ce que je veux, c'est sélectionner un élément dans le RecyclerView, changer l'arrière-plan de ce point de vue, et de stocker la position de l'élément sélectionné.
Le principal problème est que vous avez onCreateViewHolder (à la carte), onBindViewHolder (à la carte) et ViewHolder constructeur et tout le monde est de travailler avec des méthodes différentes.
Maintenant, je ne sais même pas où mettre onClickListener (dans les projets précédents, je l'ai mis dans ViewHolder), parce que les gens sont ce qui suggère que les deux autres méthodes.
Mon idée était de stocker chaque ViewHolder (ou Vue) dans la liste, afin que je puisse avoir de référence à chaque ligne, et de changer l'arrière-plan à partir de là. Mais cela ne fonctionne pas pour moi, parce que quand j'essaie de l'ajouter à la liste d'Affichage(ou ViewHolders), à partir de trois endroits (onCreateVH, onBindVH, VH classe), mon application se bloque pour une raison quelconque (pointeur null ex).
Des suggestions? Où et comment la mettre en œuvre?
source d'informationauteur Gudin
Vous devez vous connecter pour publier un commentaire.
Mondiale variable pour stocker la position de poignée et cliquez sur l'auditeur dans
ViewHolder
.Onclick
de l'article, le changement de la position globale de la valeur commepuis dans
onBindViewHolder
avec ce code, l'élément sur lequel vous avez cliqué obtenir de couleur rouge et tous les autres se retirera pour être en blanc.
Tout d'abord, avez-vous demandé où mettre la onClickListener - vous le mettre dans le onBindViewHolder. Vous pouvez également joindre un onClickListener dans le ViewHolder classe de votre article comme suit:
À la mise en œuvre d'une sélection unique de comportement, les réponses données ici, mais l'appel de onNotifyDatasetChanged est mauvais pour la performance si vous avez beaucoup d'éléments qu'il relie tous les points de vue à partir de zéro à chaque fois.
Le lien donné par Rafiduzzaman Sonnet est un bon tutoriel pour comprendre beaucoup de choses sur la configuration de RecyclerView, mais je pense qu'il est plus simple de sélection des comportements complexes. Je vais répondre de manière exhaustive, en donnant tout ce dont on pourrait avoir besoin pour le faire fonctionner. Voici comment j'ai mis en place la sélection unique de comportement:
getItemSelectionIndicator()
etgetItemWrapperView()
sont des méthodes à l'intérieur de l'élément ViewHolder que le retour de vues à partir de la page de l'élément. Un ItemWrapperView pourrait être le plus Linéaire/RelativeLayout qui enveloppe l'ensemble de l'objet. La fixation d'un écouteur de clics sur il vous assurer clics de travail si l'utilisateur appuie n'importe où dans le point de vue.ItemSelectionIndicator peut être Linéaire ou RelativeLayout qui a été mis sur une liste d'état drawable arrière-plan. Cela signifie que lorsqu'il est sélectionné, il affiche une forme drawable automatiquement pour indiquer la sélection. Lorsqu'il est défini comme pas, le drawable sera supprimé automatiquement. C'est ce que l'indicateur vue ressemble:
C'est selection_indicator_state_list.xml dans res/drawable:
Et c'est item_selection_shape.xml dans res/drawable: