Es gibt nicht genug Code zu verstehen, was hier eigentlich los ist. Aber ich könnte einige häufige Fehler vorschlagen, die bei der Implementierung der ContextMenu
berücksichtigt werden müssen.
Sie müssen zuerst das Kontextmenü registrieren. Von der Entwickler Dokumentation ein Kontextmenü Erstellen -
Wenn Ihre Aktivität verwendet ein ListView
oder GridView
und Sie möchten jedes Element zu den gleichen Kontextmenü zur Verfügung stellen, registrieren Sie alle Elemente für ein Kontextmenü durch die ListView
vorbei oder GridView
bis registerForContextMenu()
.
Sie könnten also in Betracht ziehen, etwas in Ihrer onCreate
Funktion Ihrer ListActivity
zu tun.
registerForContextMenu(getListView());
Und ich sehe keine MenuInflater
in Ihrem onCreateContextMenu
. Sie müssen die Ansicht beim Erstellen des Kontextmenüs aufblähen.
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
Aus der Dokumentation
MenuInflater
können Sie über das Kontextmenü aus einem Menü Ressource aufzublasen. Zu den Parametern der Callback-Methode gehören View
, die der Benutzer ausgewählt hat, und ein ContextMenu.ContextMenuInfo
-Objekt, das zusätzliche Informationen zu dem ausgewählten Element bereitstellt. Wenn Ihre Aktivität mehrere Ansichten hat, die jeweils ein anderes Kontextmenü enthalten, können Sie mit diesen Parametern ermitteln, welches Kontextmenü aufgeklappt werden soll.
Und Sie müssen möglicherweise einen Long-Klick-Listener für Ihre Listenelemente implementieren. Es scheint nur mit Long-Click-Events zu funktionieren.
Wenn die registrierte Ansicht, die ein langfris Click-Ereignis empfängt, ruft das System Ihre onCreateContextMenu()
Methode. Hier definieren Sie das Menü Elemente, normalerweise durch Aufblasen einer Menüressource.
Hier gehen Sie für die volle implementation documentation. Ich hoffe, das hilft!
aktualisieren
Wenn Sie nicht ListActivity
verwenden, sollten Sie nicht in der Lage sein getListView
zu nennen. Übergeben Sie in diesem Fall einfach die ListView
Referenz, während Sie Ihr Kontextmenü für Ihre Liste registrieren.
ListView lv = (ListView) findViewById(R.id.my_list);
registerForContextMenu(lv);
'getListView()' kann nur verwendet werden, wenn Ihre Tätigkeit 'ListAcitivty' erstreckt, wenn ich mich nicht irre. Also, da ich es nicht nennen kann, bedeutet das, dass ich 'onCreateContextMenu()' nicht benutzen kann? – Leb
Bitte beachten Sie die aktualisierte Antwort und akzeptieren und Upvote, wenn hilfreich. –
Vielen Dank, dass Sie sich die Zeit genommen haben und dabei geholfen haben. – Leb