Maison >Java >javaDidacticiel >Comment supprimer des éléments d'un RecyclerView Android avec des boutons croisés ?

Comment supprimer des éléments d'un RecyclerView Android avec des boutons croisés ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 00:51:03199parcourir

How to Remove Items from an Android RecyclerView with Cross Buttons?

Ajout et suppression d'éléments Android RecyclerView

Problème

Cette implémentation de RecyclerView comprend une boîte TextView et un bouton croisé (ImageView). Un bouton en dehors de RecyclerView est utilisé pour basculer la visibilité du bouton croisé. L'objectif est de supprimer un élément du RecyclerView lorsque l'on clique sur le bouton en forme de croix correspondant.

Solution

Dans la classe ViewHolder de l'adaptateur :

  1. Implémentez l'interface OnClickListener pour que ViewHolder gère les clics sur ImageView et TextView.
  2. Ajoutez un gestionnaire OnClick pour le bouton croisé (ImageView). Dans le gestionnaire, supprimez l'élément de l'ensemble de données et mettez à jour RecyclerView avec notifyDataSetChanged().
  3. Dans votre classe Adapter, ajoutez une méthode pour supprimer un élément à une position spécifique , appelant notifyItemRemoved() et notifyItemRangeChanged().

Exemple de code d'adaptateur

<code class="java">public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    private ArrayList<String> mDataset;

    public MyAdapter(ArrayList<String> myDataset) {
        mDataset = myDataset;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
        // ...

        holder.mNameTextView.setOnClickListener(this);
        holder.crossButton.setOnClickListener(this);

        return holder;
    }

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

        // ...

    }

    @Override
    public void onClick(View view) {
        if (view.getId() == holder.crossButton.getId()) {
            removeAt(holder.getAdapterPosition());
        } else if (view.getId() == holder.mNameTextView.getId()) {
            // ...
        }
    }

    public void removeAt(int position) {
        mDataset.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position, mDataset.size());
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        TextView mNameTextView;
        ImageView crossButton;

        public ViewHolder(View v) {
            super(v);

            mNameTextView = (TextView) v.findViewById(R.id.nameTextView);
            crossButton = (ImageView) v.findViewById(R.id.crossButton);
        }
    }
}</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn