Android: la Modification de la visibilité d'un affichage dans recyclerView
J'ai mis en place un recyclerView
dans mon projet.
J'ai un Button
dans mon recyclerView
row
. Le code de mon chaque ligne de recyclerView
est comme ceci:
savedmessage_custom_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="4dp"
android:background="#ffffff"
android:orientation="vertical">
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="Dummy text" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"
android:visibility="gone"/>
</LinearLayout>
La visibilité du bouton est gone
. Je veux changer la visibilité de ce bouton pour "visibles" lorsque quelqu'un clique sur le message
textView
au-dessus d'elle. J'ai mis en place un simple onClickLiestener()
sur le message (textView)
et changé la visibilité de button
sur le clic de la message
. Je savais que ce n'était pas d'aller travailler, mais je voulais voir les résultats. Les résultats sont bizarres. Si je clique sur le textView de la ligne 1, le bouton de ligne 7,17,19 etc aussi devient visible. Je peux deviner ce qui pourrait être coz de la mise en cache de la viewHolder.
MyViewHolder est quelque chose comme ceci:
class MyViewHolder extends RecyclerView.ViewHolder {
TextView message;
public MyViewHolder(final View itemView) {
super(itemView);
message = (TextView) itemView.findViewById(R.id.message);
message.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemView.findViewById(R.id.button).setVisibility(View.VISIBLE);
}
});
}
}
Quelqu'un peut-il me guider comment puis-je changer la visibilité d'un bouton, d'un particulier ligne uniquement, de mon recyclerView?
- Merci de poster votre code d'adaptateur. Vous aurez besoin d'ajouter une propriété à modèle du bouton visible de l'état.
Vous devez vous connecter pour publier un commentaire.
Déplacez le sur la logique à l'écart de la ViewHolder:
et le placer à l'intérieur de la méthode onBindViewHolder de votre carte:
ViewHolder est réutilisé par la RecyclerView, c'est pourquoi vous voyez le bouton visible dans les autres lignes.
Oui c'est le recyclage de la vue afin de ce il se passe des choses.
Pour cela vous devez créer une variable globale
et enregistrer la valeur isClicked.
et onBindView titulaire de mettre quelque chose comme ceci:
et sur OnClickListener enregistrer la valeur dans la liste de tableaux, ainsi que de définir visiblity.
De l'essayer.
Supprimer Visiblity=passée de XML.
Changement MyViewHOlder Constructeur;
Une autre manière;
Toujours pas de Visibilité=Allés en XML
Vous avez besoin pour gérer
visibility
de particulierbutton
, d'une ligne particulière dans@Override
méthodeonBindViewHolder
plutôt qu'à initialiser le temps.faire comme ceci