[Android 9.0 Pie Java] RecyclerView Appuyez et maintenez pour afficher un menu contextuel dont le contenu change pour chaque élément.

Je n'ai pas trouvé d'article sur la façon d'afficher un menu contextuel qui modifie le contenu de chaque élément en appuyant longuement sur l'élément dans RecyclerView, je vais donc prendre une note!

↓ Image de fin ↓ 7c30d4aa9804094e0e83ddb1b9247cb8.gif

Méthode de mise en œuvre

Affichage du menu contextuel

Pour activité ou fragment

View.OnCreateContextMenuListener

Met en oeuvre.

SampleFragment.java


public class SampleFragment extends Fragment
        implements View.OnCreateContextMenuListener {

Il existe d'autres modèles à implémenter dans ViewHolder, Je voulais séparer le contenu du menu contextuel pour chaque élément, donc je l'ai implémenté dans un fragment pratique.

Ensuite, dans la méthode onCreatedView qui crée le RecyclerView

SampleFragment.java


RecyclerView rv = view.findViewById(R.id.recyclerView);

//La fixation de l'adaptateur, etc. est omise

registerForContextMenu(rv); //Postscript

Sera ajouté. registerForContextMenu peut être appelé en implémentant View.OnCreateContextMenuListener. Vous pouvez rendre le menu contextuel reconnu par cette description.

Ensuite, implémentez ʻonCreateContextMenu` dans Fragment.

SampleFragment.java


    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        //Obtenez la position du message pressé et
        //Traiter comme l'index de la liste affichée dans RecyclerView
        //Acquérir l'ID utilisateur et réaliser la distribution des menus
        if (list.get(adapter.getPosition()).getUserId() == loginUserId) {
            menu.add(Menu.NONE, 1, Menu.NONE, "copie");
            menu.add(Menu.NONE, 2, Menu.NONE, "Éditer");
            menu.add(Menu.NONE, 3, Menu.NONE, "Effacer");
        } else {
            menu.add(Menu.NONE, 1, Menu.NONE, "copie");
        }
    }

Vous pouvez facilement ajouter des éléments en ajoutant le contenu que vous souhaitez ajouter à l'objet ContextMenu. Une valeur numérique est définie dans le deuxième argument de la méthode add, qui est utilisée dans la gestion de l'écouteur lorsqu'il est pressé. Pour référence uniquement, la méthode getPosition () est fournie dans l'adaptateur comme suit afin que la position de l'élément pressé longtemps puisse être obtenue.

Adapter.java


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

        //réduction

        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                setPosition(holder.getPosition());
                return false;
            }
        });
    }

    //Obtenez la position de l'élément pressé longtemps
    public int getPosition() {
        return position;
    }

    //Définir la position de l'élément pressé longuement
    public void setPosition(int position) {
        this.position = position;
    }

Avec l'implémentation jusqu'à présent, le menu contextuel peut être affiché.

Écouteur d'événements du menu contextuel

Implémentez ʻonContextItemSelected` et gérez-le en utilisant l'instruction switch comme indiqué ci-dessous. Puisque vous pouvez obtenir la valeur numérique pour distinguer chaque élément enregistré précédemment avec MenuItem.getItemId (), Cela ressemble à un tri avec une instruction switch.

SampleFragment.java


    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case 1:
                //Copier le message TODO dans le presse-papiers
                return true;
            case 2:
                //Modifier le message TODO
                return true;
            case 3:
                //Supprimer le message TODO
                return true;
            default:
                return false;
        }
    }

c'est tout.

J'espère que ça aide quelqu'un! !!

Recommended Posts

[Android 9.0 Pie Java] RecyclerView Appuyez et maintenez pour afficher un menu contextuel dont le contenu change pour chaque élément.
[Pour les débutants] Exemple minimum pour afficher RecyclerView en Java
[Android] Modifiez le nom de l'application et l'icône de l'application pour chaque saveur
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe