Ich möchte ein Kontextmenü auf einigen MenuItems meiner Navigationsleiste öffnen (um dynamisch erstellte Listen von Elementen anzuzeigen, aus denen ausgewählt werden kann). Aber ich kann nicht herausfinden, welche Ansicht für registerForContextMenu
zu verwenden, noch weiß ich, welche Ansicht manuell an openContextMenu
übergeben werden (z. B. wenn das Kontextmenü auch mit einem einzigen Klick angezeigt werden soll). Die Verwendung der MenuItem-Kennung funktioniert nicht, da sie nicht in eine Ansicht umgewandelt werden kann. Wie kann ich hier ein Kontextmenü verwenden?Wie erstelle ich ein Kontextmenü auf einem MenuItem einer Navigationsleiste?
Antwort
Eine Möglichkeit, dies zu erreichen, besteht darin, das gesamte NavigationView für das Kontextmenü zu registrieren und zu verfolgen, welches menuItem ausgewählt wurde, indem es in einer internen Membervariable gespeichert wird, bevor ein Objekt manuell angeklickt wird openContextMenu
auf der NavigationView. Dann ist es möglich, onCreateContextMenu
nur für diejenigen MenuItems zu implementieren, für die ich eigentlich das Kontextmenü benötige.
Insbesondere registrieren ich die Schublade für Kontextmenü wie folgt aus:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.top_menu, menu);
NavigationView nav_draw = (NavigationView) findViewById(R.id.nav_view);
if (nav_draw != null) {
registerForContextMenu(nav_draw);
}
return true;
}
stelle ich eine Membervariable
private MenuItem _lastNavDrawerMenuItemSelected = null;
, die ich bei null zu halten, wenn keine der „interessanten“ Menüpunkte ausgewählt sind, sonst speichere ich darin den aufrufenden Menüpunkt und öffne das Kontextmenü manuell:
Ich@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
if (v.getId() == R.id.nav_view) {
if (_lastNavDrawerMenuItemSelected != null) {
if (_lastNavDrawerMenuItemSelected.getItemId() == R.id.my_submenu_item_id) {
menu.setHeaderTitle(...);
menu.add(v.getId(),_lastNavDrawerMenuItemSelected.getItemId(), Menu.NONE, <ENTRY TITLE>);
...
}
_lastNavDrawerMenuItemSelected = null;
}
}
}
Schließlich:
In onCreateContextMenu
stelle ich sicher, dass nur die gewünschten MenuItems behandelt erhalten, weitergeben die ID der NavigationView und aktuelle MenuItem als groupId
und itemId
, und stellen Sie die interne Membervariable null
zurück implementieren die notwendigen Maßnahmen auf der Grundlage groupId
(die ich den NavigationView oben gesetzt) und itemId
(die ich das MenuItem gesetzt, für die das Kontextmenü gebaut wurde):
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getGroupId() == R.id.nav_view) {
if (item.getItemId() == R.id.my_submenu_item_id) {
...
}
}
return true;
}
- 1. Wie erstelle ich ein Dropdown in einer Navigationsleiste (in Android)?
- 2. Wie erstelle ich ein Kontextmenü in Java Swing?
- 3. Wie setze ich ein Tag zu MenuItem?
- 4. Android - Aktivieren und Deaktivieren von MenuItem auf Navigationsleiste Aktivität Layout-
- 5. Wie erstellt man ein Kontextmenü in einem MapView?
- 6. Wie erstelle ich eine benutzerdefinierte Navigationsleiste wie die BestBuy App?
- 7. Wie auf einem Kontextmenü- Popup-Menü klicken
- 8. Wie kann ich einem ListBoxItem ein Kontextmenü hinzufügen?
- 9. Wie erstelle ich ein Untermenü mit Radiobuttons in Android?
- 10. Wie erstelle ich ein IUSHR4 auf IJVM?
- 11. Wie erstelle ich eine Navigationsleiste in Xamarin Forms für iOS?
- 12. Kontextmenü auf einem MapView oder andere Lösungen
- 13. Wie erstelle ich ein Kartensymbol?
- 14. Wie wird ein Long-Klick-Listener auf einem MenuItem (in einer NavigationView) festgelegt?
- 15. Android Tooltips auf MenuItem
- 16. Kontextmenü auf TreeViewItem Ruft TreeViewItem Methode auf?
- 17. Wie erstelle ich ein jqGrid
- 18. Wie kann ich von einer SKScene auf die Navigationsleiste zugreifen?
- 19. Wie erstelle ich ein Singleton?
- 20. Wie erstelle ich ein Leinwandauswahlwerkzeug?
- 21. Wie erstelle ich ein PDF?
- 22. Wie erstelle ich ein EncodedImage von einem javax.microedition.lcdui.Image
- 23. Wie ein MenuItem zu erhalten, indem id
- 24. Wie bekomme ich '&' als Text in einem MenuItem anzuzeigen
- 25. Wie ich Kontextmenü
- 26. Wie kann ich ein MenuItem im Optionsmenü von Android ändern?
- 27. Wie erstelle ich ein Frühlingsprojekt?
- 28. Wie erstelle ich ein Sternenbewertungssystem?
- 29. Wie erstelle ich ein Ereignis in einem PerlNet-Modul?
- 30. Wie erstellt man ein Kontextmenü in der Statusleiste?
Ist das eine Art von Hausaufgaben/App? Ich habe die genau gleiche Frage vor nicht allzu langer Zeit gesehen. Ich gebe Ihnen den gleichen Rat, den ich bei der anderen Frage gegeben habe, überdenken Sie Ihre Logik: Sie sollten eigentlich keine Kontextmenüs für Menüeinträge starten, da dies nicht die große Mehrheit der Benutzer erwarten würde. – Luksprog
Ich habe Nutzer gesehen, die dasselbe über Aktionsleisten-Menüelemente diskutieren, also warum sollten Sie nicht dasselbe für Schubladenmenüelemente in Betracht ziehen? Wenn man bedenkt, dass nicht jeder, der sich entwickelt, ein ausgewachsener Android-Experte ist (und manche sogar versuchen, besser zu werden, indem sie an einer "echten" App statt an einer Hausaufgabe arbeiten), könnten Sie konkretere Vorschläge machen Ansätze dienen hier? Ich habe versucht, Untermenüs zu verwenden, aber soweit ich das durch das Lesen von mehreren Beiträgen verstehe, kann ich sie nicht einfach aufblasen/wieder aufblasen, so dass mein Menü in der Schublade mit ständig geöffneten Untermenüs unhandlich wird. – urps
Ich empfehle es dagegen, weil es nicht das ist, wofür das Widget erstellt wurde (wie die Navigation durch Ihre App und keine willkürlichen Inhalte wie ContextMenu anzuzeigen). Stattdessen würde ich aus den wenigen Informationen, die Sie zur Verfügung gestellt haben, empfehlen, die NavigationView durch eine ExpandableListView zu ersetzen, auf diese Weise haben Sie die "Hauptoptionen" (Ihre aktuellen Menüoptionen) und wenn der Benutzer auf diese klickt, zeigen Sie die Kindansichten (Ihre Datenlisten) darunter, die der Art und Weise, wie Sie die Daten anzeigen, eine gewisse Struktur verleihen. – Luksprog