2

J'utilise un RecyclerView où il y a un booléen impliqué dans getItemCount(). Cette valeur booléenne contrôle la visibilité du dernier élément dans le RecyclerView, un peu comme une vue plus chargée, mais légèrement différente. De temps en temps, la valeur de ce booléen change, ainsi le RecyclerView saura s'il faut inclure le dernier élément.RecyclerView - nombre d'éléments de contrôle par booléen

Le code ressemble à ceci

@Override 
public int getItemCount() { 
    return mItemArray.size() + (shouldShow ? 1 : 0); 
} 

Lorsque la valeur de shouldShow est mis à jour, je ne suis pas appeler notifyDataSetChanged() ou notifyItemChanged(), mais le RecyclerView obtient encore correctement mis à jour. Mais je crains que cela finisse par provoquer le plantage du RecyclerView en raison d'une incohérence. Mes questions sont,

  1. utilise une valeur booléenne dynamique getItemCount() une bonne façon de contrôler la taille RecyclerView?
  2. Devrais-je appeler notify...() lorsque la valeur de ce booléen change?
  3. Est-ce que mon RecyclerView se bloque pour cause d'incohérence à cause de cela?

Répondre

0

1.pas un problème jusqu'à ce que vous allez passer int dans ce 2.there est pas nécessaire d'appeler notifydatasetchanged (nous les appelons lorsque leur est le changement dans les données de l'adaptateur) 3.There ne sera pas une cohérence

+0

Nous vous remercions d'avoir répondu, mais que voulez-vous dire par «passer int int '? – katie

+0

Je veux dire que getItemCount return int nous ne devrions passer que des valeurs int dans lesquelles vous passez 1 ou 0 basé sur la valeur booléenne c'est correct –

0

1.It est OK
2.Pour le dernier élément à afficher juste après votre variable booléenne a changé devez appeler notifyDataSetChanged(), parce que getItemCount() ne sera pas appelé par l'adaptateur jusqu'à vue recycleur est défilée.
3. L'application peut se bloquer si vous ne gérez pas tout le comportement. Par exemple, vous prenez un objet de votre mItemArray à l'intérieur de la méthode onBindViewHolder(), et quand getItemCount() renvoie le nombre plus grand que la taille de votre tableau, l'application lancera IndexOutOfBoundException. Dans ce cas, vous devez vérifier si la position est inférieure à la taille de votre tableau.

if (position < mItemArray.size()){ 
    //you can get item from the array 
} else { 
    //handle your additional item 
} 
+0

Salut, merci pour votre réponse. Je gère toutes les actions concernant le mItemArray, c'est seulement le booléen dont je m'inquiète. – katie