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"); } }
4 Réponses :
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"); } }
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.
Je récupère les données de Firebase rien à voir avec la minusList
c'est une donnée différente
au lieu d'utiliser holder.itemView.setVisibility(View.GONE);
, utilisez ceci:
ViewGroup.LayoutParams params = holder.itemView.getLayoutParams(); params.height = 0; holder.itemView.setLayoutParams(params);
Cela devrait être la solution acceptée, au moins cela a fonctionné pour moi
ViewGroup.LayoutParams params = chatsViewHolder.itemView.getLayoutParams(); params.height = 0; chatsViewHolder.itemView.setLayoutParams(params);
Veuillez expliquer votre code pour une meilleure réponse.
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-vousnotifyItemRemoved
?. 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 lavisibility(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 :)