3
votes

La visibilité disparue dans recyclerview occupe toujours des espaces?

Voici mon code actuel. Je souhaite masquer un élément spécifique sur mon recyclerview mais lorsque j'utilise visibility.gone occupe toujours des espaces sur le recyclerview. J'ai également essayé toutes les solutions possibles Comment masquer un article de Recycler View dans une condition particulière? De l'aide

<android.support.v7.widget.RecyclerView
                android:id="@+id/listView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:focusable="false"
                android:focusableInTouchMode="false" />

Voici mon XML

  for(int j =0; j < minusList.size(); j++){
      int availableRooms =  minusList.get(j);

      if(norooms > availableRooms){ //norooms is the number of rooms wanted
      holder.itemView.setVisibility(View.GONE);
      mAdapter.notifyItemRemoved(position);
     }else{
      holder.rRoomsLeft.setText("Room available");
     }

}


11 commentaires

Mieux vaut publier le code XML de votre cellule d'élément de recyclage


@DhavalSolanki a modifié mon message


En fait, je demande une cellule XML, c'est-à-dire une mise en page que vous avez utilisée pour afficher une seule ligne.


Quelle est l'utilisation de holder.itemView.setVisibility(View.GONE); appelez-vous notifyItemRemoved ?. Si l'élément est supprimé, sa visibilité n'a pas d'importance., .. De plus, je n'ai aucune idée de l'endroit où vous appelez exactement ce morceau de code. Fournissez un exemple reproductible minimal .


Si je mets tout mon code, c'est trop Si vous voulez chaque détail lol.


Je vais supprimer notifyItemRemoved Je veux juste supprimer l'espace en utilisant la visibility(GONE)


C'est le plus simple et le plus petit lol


Pouvez-vous inclure des captures d'écran de la vue de recyclage avant et après le masquage de l'élément?


Je pense que vous utilisez le remplissage ou la marge dans le fichier de ligne XML, c'est pourquoi il affiche un espace vide.


vous souhaitez masquer une ligne mais ne souhaitez pas supprimer l'élément de la liste ??


Le minusList est-il le tableau que vous utilisez pour remplir les éléments de l'adaptateur si tel est le cas, supprimez l'élément de la minusList, puis appelez notifyItemRemoved à la position sinon supprimez l'élément du tableau que vous utilisez dans l'adaptateur, puis appelez notifyItemRemoved et faites cela en dehors de votre onbind, si vous donnez plus d'informations sur votre code, les gens peuvent mieux vous aider, alors veuillez donner plus d'informations :)


4 Réponses :


0
votes

S'il vous plaît, essayez celui-la

    for(int j =0; j < minusList.size(); j++){

      int availableRooms =  minusList.get(j);

      if(norooms > availableRooms){        //norooms is the number of rooms wanted
        holder.itemView.setVisibility(View.GONE);
        mAdapter.notifyItemRemoved(position); 
     }else{
         holder.itemView.setVisibility(View.VISIBLE);
         holder.rRoomsLeft.setText("Room available");
     }
}


0 commentaires

0
votes

Je suppose que vous dites «occuper l'espace» parce que la ligne est là mais n'affiche pas «pièce disponible».

Supprimer une ligne de RecyclerView se fait en la supprimant d'abord de la liste soulignée et en appelant soit notifyItemRemoved ou notifyDatasetChanged, pas en masquant la vue des lignes.

Dans votre cas, vous devez d'abord supprimer des éléments de minusList, puis appeler notifyItemRemoved, sinon si getItemCount () renvoie toujours minusList.size, RecyclerView pense toujours que la ligne est là, même si elle n'est pas visible.


1 commentaires

Je récupère les données de Firebase rien à voir avec la minusList c'est une donnée différente



2
votes

au lieu d'utiliser holder.itemView.setVisibility(View.GONE); , utilisez ceci:

  ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();
  params.height = 0;
  holder.itemView.setLayoutParams(params);


1 commentaires

Cela devrait être la solution acceptée, au moins cela a fonctionné pour moi



0
votes
ViewGroup.LayoutParams params = chatsViewHolder.itemView.getLayoutParams();
params.height = 0;
chatsViewHolder.itemView.setLayoutParams(params);

1 commentaires

Veuillez expliquer votre code pour une meilleure réponse.