0

Comme le titre dit, Si j'Override getItemViewType(int position) dans l'adaptateur d'un RecyclerView:Que signifie renvoyer une valeur différente pour chaque position dans l'adaptateur RecyclerView getItemViewType()?

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

Est-ce que cela veut dire que je ne vais pas avoir des vues recyclés? Puisque cela signifie que j'ai un type de vue différent dans chaque position?

Si oui, est-ce équivalent à setIsRecyclable(true)?

Je pose cette question parce que j'ai rencontré un problème avec les éléments RecyclerView mélangés et dupliqués dans un défilement sans fin. J'ai essayé getItemViewId() pour retourner un identifiant unique, mais n'a pas fonctionné. Les deux seules façons, il est travaillé par setIsRecyclable(true) et retour valeur différente pour chaque position de getItemViewType(position)

+0

Il existe un problème sous-jacent que vous êtes en quelque sorte en train de travailler avec ces appels. Si vous avez besoin d'aide pour aller au fond des choses, je vous suggère de poster une autre question (si vous ne l'avez pas déjà fait) qui traite des éléments qui sont «mélangés et dupliqués». – Cheticamp

Répondre

0

getItemViewType() indique au RecyclerView quel genre de vue est en position. Voir le documentation.

getItemViewType

Retour le type d'affichage de l'élément à la position aux fins de recyclage de vue.

L'implémentation par défaut de cette méthode renvoie 0, en supposant un type de vue unique pour l'adaptateur. Contrairement aux adaptateurs ListView, les types n'ont pas besoin d'être contigus. Envisagez d'utiliser des ressources d'identification pour identifier de manière unique les types d'affichage d'élément.

...

valeur renvoyée int entier identifiant le type de vue nécessaire pour représenter l'élément à la position. Les codes de type n'ont pas besoin d'être contigus.

Votre code n'empêche pas le recyclage des vues. Je ne pense pas que vous voulez retourner la position car cela indique que vous avez un type de vue différent pour chaque position.

+0

Je devais l'utiliser, puisque j'avais un problème avec les éléments recyclerview mélangés et dupliqués, j'ai essayé 'getItemViewId()' mais rien n'a été corrigé, seulement ceci et 'setIsRecyclable (true) l'ont corrigé. –