[Android 9.0 Pie Java] RecyclerView Halten Sie gedrückt, um ein Kontextmenü anzuzeigen, dessen Inhalt sich für jedes Element ändert.

Ich konnte keinen Artikel darüber finden, wie ein Kontextmenü angezeigt wird, das sich für jedes Element ändert, indem ich lange auf das Element in RecyclerView drücke. Ich mache mir also eine Notiz!

↓ Abschlussbild ↓ 7c30d4aa9804094e0e83ddb1b9247cb8.gif

Implementierungsmethode

Anzeigen des Kontextmenüs

Für Aktivität oder Fragment

View.OnCreateContextMenuListener

Geräte.

SampleFragment.java


public class SampleFragment extends Fragment
        implements View.OnCreateContextMenuListener {

In ViewHolder müssen andere Muster implementiert werden. Ich wollte den Inhalt des Kontextmenüs für jedes Element trennen, also habe ich es in einem praktischen Fragment implementiert.

Als Nächstes in der onCreatedView-Methode, mit der RecyclerView erstellt wird

SampleFragment.java


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

//Das Anbringen eines Adapters usw. entfällt

registerForContextMenu(rv); //Nachtrag

Wird hinzugefügt werden. registerForContextMenu kann durch Implementieren von View.OnCreateContextMenuListener aufgerufen werden. Sie können das Kontextmenü anhand dieser Beschreibung erkennen.

Implementieren Sie als Nächstes onCreateContextMenu in Fragment.

SampleFragment.java


    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        //Holen Sie sich die lang gedrückte Nachrichtenposition und
        //Als Index der in RecyclerView angezeigten Liste behandeln
        //Benutzer-ID erfassen und Menüverteilung realisieren
        if (list.get(adapter.getPosition()).getUserId() == loginUserId) {
            menu.add(Menu.NONE, 1, Menu.NONE, "Kopieren");
            menu.add(Menu.NONE, 2, Menu.NONE, "Bearbeiten");
            menu.add(Menu.NONE, 3, Menu.NONE, "Löschen");
        } else {
            menu.add(Menu.NONE, 1, Menu.NONE, "Kopieren");
        }
    }

Sie können Elemente einfach hinzufügen, indem Sie den Inhalt hinzufügen, den Sie dem ContextMenu-Objekt hinzufügen möchten. Im zweiten Argument der add-Methode wird ein numerischer Wert festgelegt, der beim Drücken des Listeners beim Drücken verwendet wird. Nur als Referenz wird die Methode "getPosition ()" im Adapter wie folgt bereitgestellt, damit die Position des langgepressten Elements ermittelt werden kann.

Adapter.java


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

        //Kürzung

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

    //Ermitteln Sie die Position des langgepressten Elements
    public int getPosition() {
        return position;
    }

    //Stellen Sie die Position des langgepressten Elements ein
    public void setPosition(int position) {
        this.position = position;
    }

Mit der bisherigen Implementierung kann das Kontextmenü angezeigt werden.

Listener für Kontextmenüereignisse

Implementieren Sie "onContextItemSelected" und behandeln Sie es mit der switch-Anweisung wie unten gezeigt. Da Sie den numerischen Wert für die Unterscheidung jedes zuvor bei MenuItem.getItemId () registrierten Elements erhalten können, Es fühlt sich an, als würde man mit einer switch-Anweisung sortieren.

SampleFragment.java


    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case 1:
                //Kopieren Sie die TODO-Nachricht in die Zwischenablage
                return true;
            case 2:
                //TODO-Nachricht bearbeiten
                return true;
            case 3:
                //TODO-Nachricht löschen
                return true;
            default:
                return false;
        }
    }

das ist alles.

Ich hoffe es hilft jemandem! !!

Recommended Posts

[Android 9.0 Pie Java] RecyclerView Halten Sie gedrückt, um ein Kontextmenü anzuzeigen, dessen Inhalt sich für jedes Element ändert.
[Für Anfänger] Mindestbeispiel für die Anzeige von RecyclerView in Java
[Android] Ändern Sie den App-Namen und das App-Symbol für jeden Geschmack
So überprüfen Sie den Inhalt der Java-Zeichenfolge mit fester Länge