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 ↓
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.
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