EDIT: Diese Frage war für die veraltete Sherlock-Aktionsleiste. Stattdessen sollte jetzt die Android-Unterstützungsbibliothek verwendet werden
Ich habe eine Menüoption in der Aktionsleiste mit dem Namen "Freigabe für meine" hinzugefügt, fragment
die angezeigt wird, aber das Auswahlereignis wird nicht abgefangen
Ich füge es so hinzu
@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
MenuItem item = menu.add(0, 7,0, R.string.share);
item.setIcon(R.drawable.social_share).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
Der Versuch, es sowohl in der Art fragment
als auch in der fragment activity
Art zu erfassen
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 7:
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(Intent.EXTRA_TEXT, "I'm being sent!!");
startActivity(Intent.createChooser(share, "Share Text"));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
und ich habe setHasOptionsMenu(true);
in der onCreate()
.
quelle
Ich hatte das gleiche Problem, aber ich denke, es ist besser, den letzten Schritt zusammenzufassen und einzuführen, damit es funktioniert:
Fügen Sie der
setHasOptionsMenu(true)
Methode Ihres Fragments eineonCreate(Bundle savedInstanceState)
Methode hinzu.Überschreiben Sie
onCreateOptionsMenu(Menu menu, MenuInflater inflater)
(wenn Sie im Menü Ihres Fragments etwas anderes tun möchten) undonOptionsItemSelected(MenuItem item)
Methoden in Ihrem Fragment.Stellen Sie in der
onOptionsItemSelected(MenuItem item)
Methode Ihrer Aktivität sicher, dass Sie zurückkehren,false
wenn die Menüelementaktion in deronOptionsItemSelected(MenuItem item)
Methode von Fragment implementiert wird.Ein Beispiel:
Aktivität
Fragment
quelle
return false
on Activity'sonOptionItemSelected
ist der Schlüssel. einfach ersetzenreturn super.onOptionItemSelected(item);
Ich habe festgestellt, dass die Lösung, die Ihnen gegeben wurde, darin bestand, den Code für Ihr Menüelement in der Aktivität und nicht das Fragment zu implementieren. Ich denke, es wird viel besser aussehen, wenn Sie den Code in das Fragment implementiert haben, anstatt die Aktivität, weil es meiner Meinung nach besser aussieht. Gehen Sie dazu wie folgt vor:
Aktivität
Fragment
Nun die Zeilen (und dergleichen): "return super.onOptionsItemSelected (item);" in der Aktivität und Fragment sind sehr wichtig, denn als ob Sie dem Code beim Debuggen folgen würden, werden Sie sehen, dass die Menüereignisfunktionen zuerst in der Aktivität aufgerufen werden und wenn das Element nicht mit den IDs im Schalter der Aktivität übereinstimmt. In diesem Fall die Degault-Zeile: "super.onOptionsItemSelected (item);" ruft die Funktion onOptionsItemSelected für das Fragment auf, wie wir wollten. (Wenn Sie viele Fragmente haben, stellen Sie sicher, dass auch diese Zeile enthalten ist, da die aufrufende Hirarchie etwas kompliziert sein kann).
quelle
Ich benutze Actionbarsherlock. Das hat bei mir funktioniert:
1) Erstellen Sie das Menü dummy_menu.xml
2) Bei Aktivität das Menü wie folgt aufblasen:
3) Rufen Sie in Fragmenten onCreateView setHasOptionsMenu (true) auf und überschreiben Sie onCreateOptionsMenu und onOptionsItemSelected. Verstecken Sie auch das DummyMenu wie folgt (im Fragment).
Hoffe es hilft jemandem.
quelle
Bearbeiten für Sherlock in der Aktionsleiste
Ich musste benutzen
in der Hauptaktivität, um den Menüpunkt zu erfassen
quelle
onContextItemSelected
anstelle von aufruftonOptionsItemSelected
. DasonMenuItemSelected
leitet den Klick einfach an die richtige Methode weiter, weshalb es besser zu funktionieren scheint.Es ist so einfach, dass Sie dies in Ihrem Fragment tun können, um sicherzustellen, dass Ihre Aktion korrekt zuhört:
quelle
Ich hatte dieses Problem. Es war, weil ich die falsche Methode überschrieb
onOptionsItemSelected (com.actionbarsherlock.view.MenuItem-Element) habe ich verwendet.
Stellen Sie sicher, dass Sie die richtige verwenden!
quelle
Sie sind in den Aktivitätsmethoden nicht an die Oberklasse gekettet. Bitte lassen Sie onCreateOptionsMenu () super.onCreateOptionsMenu (Menü) zurückgeben und onOptionsItemSelected () super.onOptionsItemSelected (item) zurückgeben (mit Ausnahme des von Ihnen bearbeiteten Elements, das true zurückgeben sollte, um anzuzeigen, dass Sie das Ereignis behandelt haben).
quelle
Sie müssen diesen Code als
toolbar.bringToFront();
nächstes in der Symbolleiste Ihrer Aktivität hinzufügenquelle