Changement de couleur d'arrière-plan de l'élément sélectionné dans recyclerview
Comment changer la couleur de fond sélectionnée uniquement afficher dans mon recycler voir exemple?seulement la couleur de fond de cliqué itemview doit être changé.
Un seul élément sélectionné doit être affiché avec la couleur d'arrière-plan de changement à la fois et le reste doit être aussi avant de choisir.
voici mon code :
MainActivity
public class MainActivity extends AppCompatActivity {
RecyclerView rv1;
private final String android_versions[]={
"Donut",
"Eclair",
"Froyo",
"Gingerbread",
"Honeycomb",
"Ice Cream Sandwich",
"Jelly Bean",
"KitKat",
"Lollipop",
"Marshmallow"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
}
private void initViews(){
rv1=(RecyclerView)findViewById(R.id.recyclerView1);
rv1.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(getApplicationContext());
rv1.setLayoutManager(layoutManager);
RecyclerDataAdapter rda=new RecyclerDataAdapter(rv1,getApplicationContext(),android_versions);
rv1.setAdapter(rda);
}
}
RecyclerDataadapter
public class RecyclerDataAdapter extends RecyclerView.Adapter<RecyclerDataAdapter.ViewHolder> {
private String android_versionnames[];
private Context context1;
private RecyclerView mRecyclerView;
public RecyclerDataAdapter(RecyclerView recylcerView,Context context,String android_versionnames[]){
this.android_versionnames=android_versionnames;
this.context1=context;
mRecyclerView=recylcerView;
setHasStableIds(true);
System.out.println("Inside dataadapter,Android names : \n ");
for(int i=0;i<android_versionnames.length;i++){
System.out.println("\n"+android_versionnames[i]);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.tv1.setText(android_versionnames[position]);
}
@Override
public int getItemCount() {
return android_versionnames.length;
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView tv1;
LinearLayout row_linearlayout;
RecyclerView rv2;
public ViewHolder(final View itemView) {
super(itemView);
tv1=(TextView)itemView.findViewById(R.id.txtView1);
row_linearlayout=(LinearLayout)itemView.findViewById(R.id.row_linrLayout);
rv2=(RecyclerView)itemView.findViewById(R.id.recyclerView1);
/*itemView.setBackgroundColor(0x00000000);//to transparent*/
}
}
}
- Modification @couleur pour @drawable/shapecolored ajouter une forme
Vous devez vous connecter pour publier un commentaire.
Enfin, j'ai eu la réponse.
ici "row_index' a la valeur '-1' abord
Un moyen simple d'y parvenir serait:
Mise à JOUR
La méthode ci-dessus peut ruiner certains attributs par défaut de l'itemView, dans mon cas, j'ai été en utilisant CardView, et le rayon de l'angle de la carte se retirer sur cliquez sur.
Meilleure solution:
MISE À JOUR 2 - IMPORTANT
onBindViewHolder méthode est appelée plusieurs fois, et aussi à chaque fois que l'utilisateur fait défiler la vue hors de la vue et à l'arrière en vue!
Cela entraînera le même point de vue à être ajouté à la liste plusieurs fois ce qui peut entraîner des problèmes et retard mineur dans le code exécutions!
Pour résoudre ce problème,
changement
à
Je peux vous proposer cette solution, que j'ai utilisé dans mon application. J'ai placé ce code de onTouchListener dans mon ViewHolder constructeur de la classe. itemView est constructeur de l'argument. Assurez-vous d'utiliser return false sur cette méthode parce que ce besoin de travail OnClickListener
Créer Drawable fichier dans Drawable foloder
Et dans le fichier xml
Dans RecyclerView onBindViewHolder
Comme le bouton à bascule
Si vous utilisez kotlin, c'est vraiment simple.
Dans votre RecyclerAdapter classe
Dans votre fragment ou de l'Activité
Ma solution:
viewOld
estnull
au début, puis des points à la dernière vue sélectionnée.Avec
onClick
vous modifier l'arrière-plan de la vue sélectionnée et de redéfinir le fond de l'avant-dernière vue sélectionnée.Simple et fonctionnelle.
Créer un sélecteur dans le dossier Drawable:
Ajout de la propriété dans votre xml (où vous déclarez la RecyclerView):
android:state_pressed
avecandroid:state_selected
Ajouter un écouteur de clics pour le point de vue dans .onBindViewHolder() de votre RecyclerView de l'adaptateur. obtenir actuellement sélectionné position et changer de couleur par .setBackground() pour précédemment sélectionné élément en cours
Plus Simple De Mon Côté, est d'Ajouter une variable dans adapterPage comme le dernier endroit où vous avez Cliqué.
dans onBindViewHolder coller ce code qui vérifie la dernière position enregistrée appariés avec les positions de chargement
Les constantes de la classe où je déclarer mes variables globales
J'ai réussi à le faire à partir de mon Activité où je suis mon Rv et non pas à partir de la carte
Si besoin de quelqu'un pour faire quelque chose de similaire voici le code
Dans ce cas, les changements de couleur sur un logClick
Ce que j'ai fait pour parvenir à ce qui se fait un variable statique à stocker le dernier cliqué sur la position de l'élément dans le RecyclerView et d'en notifier à l'adaptateur de mise à jour de la mise en page à la position sur le dernier endroit où vous avez cliqué c'est à dire notifyItemChanged(lastClickedPosition) dès qu'un nouveau poste est cliqué. L'appel de notifyDataSetChanged() sur l'ensemble de la mise en page est très coûteux et donc impossible de le faire pour une seule position est beaucoup mieux.
Voici le code:
Nous serons donc en fait uniquement la mise à jour de la destinée de l'élément et pas de ré-exécuter les mises à jour inutiles pour les éléments qui n'ont même pas été changé.
Je l'ai eu comme ça
Grâce