2017-10-03 6 views
0

J'ai un recyclerView avec une mise en page personnalisée (1 imageView + 2 TextViews) ..Comment changer la couleur de l'article RecyclerView, si cet article a été cliqué auparavant?

La question: Le texte de recyclerView article est à Green .. Je dois changer à rouge, si l'utilisateur a cliqué sur le article en recyclerView.

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    public TextView title,desc; 
    public ImageView thumbnail; 

    public MyViewHolder(View view) { 
     super(view); 
     itemView.setOnClickListener(this); 

     title = (TextView) view.findViewById(R.id.text1); 
     thumbnail = (ImageView) view.findViewById(R.id.thumbnail); 
     desc = (TextView) view.findViewById(R.id.desc); 
     whereToGo = title.getText().toString(); 
    } 



    @Override 
    public void onClick(View view) 
    { 


     Intent i = new Intent(mContext, DisplayLockedLesson.class); 
     i.putExtra("Lesson Name", title.getText().toString()); 
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
     mContext.startActivity(i); 

     } 

    } 
} 

, je fais des leçons App .. Lorsque l'utilisateur a cliqué sur l'élément de la recyclerView, il change la couleur de cet article indiquant à l'utilisateur qu'il a terminé la leçon avant ...

Merci .

Répondre

0

Je pense que vous pouvez ajouter un indicateur à chaque élément dans un hashmap ou dans une base de données. Modifiez ce drapeau dans la méthode onclicklistener ... alors vous pouvez lire ce drapeau pour changer la couleur de cet item.

+0

S'il vous plaît pouvez-vous me dire comment Flag recyclerVoir l'article cliqué? –

+0

Vous pouvez créer un hashmap avec le numéro d'article et son état. Enregistrer son état à coché ou non dans la méthode de l'élément onclick. À l'intérieur de votre adaptateur recyclerview, sélectionnez la couleur en fonction de la condition. Je peux vous aider davantage si vous pouvez montrer le code de votre adaptateur. –

1

À l'intérieur du modèle de recyclerview, prenez un boolean isChecked et sur la base de cela, vous pouvez définir la couleur.

+0

Cela devrait être dans un commentaire! Quoi qu'il en soit, cette solution est parfaite, pour enregistrer le dernier élément cliqué du recycleur dans la classe du modèle et changer l'arrière-plan en conséquence. – Radhey

2

Créez une variable qui stockera la position du texte cliqué et le déclarera globalement.

private int clickedTextViewPos=-1; 

En viewholder chaque fois que la position est cliqué définir cette position et cliqué appel notifyDataSetChanged()

notifyDataSetChanged() - ce que l'adaptateur notifie les données sont modifiées.

private class YourViewHolder extends RecyclerView.ViewHolder{ 

    public YourViewHolder(View itemView) { 
    super(itemView); 

    title.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      clickedTextViewPos = getAdapterPosition(); 
      notifyDataSetChanged(); 

      } 
     }); 
     } 
} 

Dans le onBindViewHolder, si la position est égale, la couleur du texte est affichée en rouge ou en vert.

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

    if(clickedTextViewPos==position){ 
      edtUser.setTextColor(edtUser.getContext().getResources().getColor(R.color.red)); 
    }else { 
      edtUser.setTextColor(edtUser.getContext().getResources().getColor(android.R.color.green)); 
    } 
} 
+0

50% travaillé ... Lorsque je clique sur l'élément de Recyclerview .. il est changé en rouge .. mais d'autres éléments sont également changés en rouge ... –

+0

comment? Si vous suivez le code, il devrait fonctionner ... clickedTextViewPos devrait être une variable globale – Anonymous