onCreateOptionsMenu innerhalb von Fragments

Lesezeit: 4 Minuten

Benutzer-Avatar
Kevin

Ich habe platziert setHasOptionsMenu(true) Innerhalb onCreateViewaber ich kann immer noch nicht anrufen onCreateOptionsMenu Innere Fragmente.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
                         Bundle savedInstanceState) {   
   setHasOptionsMenu(true);             
   return inflater.inflate(R.layout.facesheet, container, false);
}

Unten ist mein onCreateOptionsMenu Code.

@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
    getSupportMenuInflater().inflate(R.menu.layout, menu);
    return (super.onCreateOptionsMenu(menu));
}

Die Fehlermeldung bekomme ich:

Die Methode onCreateOptionsMenu(Menu) vom Typ Fragment muss eine Supertype-Methode überschreiben oder implementieren.

  • Danke für das ‘setHasOptionsMenu(true);’, danach habe ich gesucht.

    – Rudolf Real

    5. Dezember 2014 um 18:37 Uhr

Benutzer-Avatar
Sino Raj

Versuche dies,

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}

Endlich rein onCreateView Methode, fügen Sie diese Zeile hinzu, damit die Optionen in Ihrer angezeigt werden Toolbar

setHasOptionsMenu(true);

  • Es wird nicht aufgerufen, wenn Sie diese Zeile nicht hinzufügen: setHasOptionsMenu(true);

    – Yoann Hercouet

    21. September 2013 um 10:01 Uhr

  • onCreateOptionsMenu() für Fragmente hat andere Argumente als für Aktivitäten.

    – Jörg

    23. Dezember 2013 um 13:34 Uhr

  • und auch ein anderer Rückgabetyp als void im Gegensatz zum booleschen Wert von onCreateOptionsMenu() in der Aktivität, wie oben erwähnt.

    – Dexter

    14. Juni 2014 um 7:35 Uhr

  • Interessanter Hinweis: Wenn Sie in Ihrer enthaltenden Aktivität auch onCreateOptionsMenu überschreiben, werden beide Optionen im Menü angezeigt.

    – Adam Johns

    4. März 2015 um 4:51 Uhr

  • setHasOptionsMenu(true); muss gerufen werden onCreate() vollständig sein.

    – Roll

    24. März 2015 um 12:48 Uhr

Benutzer-Avatar
Alexander Färber

Sie haben bereits die automatisch generierte Datei res/menu/menu.xml definieren Aktionseinstellungen.

In deiner MainActivity.java habe folgende Methoden:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_settings:
            // do stuff, like showing settings fragment
            return true;
    }

    return super.onOptionsItemSelected(item); // important line
}

In dem onCreateView() Methode Ihres Fragment-Aufrufs:

setHasOptionsMenu(true); 

und fügen Sie auch diese 2 Methoden hinzu:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.fragment_menu, menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    switch (id) {
        case R.id.action_1:
            // do stuff
            return true;

        case R.id.action_2:
            // do more stuff
            return true;
    }

    return false;
}

Fügen Sie abschließend die neue Datei hinzu res/menu/fragment_menu.xml definieren Aktion_1 und Aktion_2.

Wenn Ihre App das Fragment anzeigt, enthält das Menü auf diese Weise drei Einträge:

  • Aktion_1 aus res/menu/fragment_menu.xml
  • Aktion_2 aus res/menu/fragment_menu.xml
  • Aktionseinstellungen aus res/menu/menu.xml

  • Die Frage war in Fragmenten, nicht in Aktivität

    – OlivierM

    10. Februar 2016 um 5:28 Uhr

  • @OlivierM die Antwort erklärt das Fragmentmenü. Ich schätze die Erklärung, wie es mit dem Aktivitätsmenü interagiert.

    – Aranda

    28. Juni 2017 um 3:02 Uhr

  • Wie vermeide ich die Anzeige von “action_settings” in den Fragmentoptionen?

    – roghayeh hosseini

    12. Juli 2021 um 11:26 Uhr

Ich habe die Antworten von @Alexander Farber und @Sino Raj ausprobiert. Beide Antworten sind nett, aber ich konnte das onCreateOptionsMenu nicht in meinem Fragment verwenden, bis ich entdeckte, was fehlte:

Fügen Sie setSupportActionBar(toolbar) in meiner Aktivität wie folgt hinzu:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.id.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

Ich hoffe, diese Antwort kann für jemanden mit dem gleichen Problem hilfreich sein.

Benutzer-Avatar
Chanh

Anruf

setSupportActionBar(toolbar)

Innerhalb

onViewCreated(...) 

von Fragment

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
    ((MainActivity)getActivity()).setSupportActionBar(toolbar);
    setHasOptionsMenu(true);
}

Set setHasMenuOptions(true) funktioniert, wenn die Anwendung ein Thema mit Actionbar hat, wie z Theme.MaterialComponents.DayNight.DarkActionBar oder Activity hat ansonsten eine eigene Symbolleiste onCreateOptionsMenu in fragment wird nicht aufgerufen.

Wenn Sie eigenständig verwenden möchten Toolbar Sie müssen entweder Aktivität abrufen und Ihre festlegen Toolbar als Stützaktionsleiste mit

(requireActivity() as? MainActivity)?.setSupportActionBar(toolbar)

wodurch Ihr Fragment onCreateOptionsMenu aufgerufen werden kann.

Eine andere Alternative ist, Sie können Ihre aufblasen Toolbar‘s eigenes Menü mit toolbar.inflateMenu(R.menu.YOUR_MENU) und Item-Listener mit

toolbar.setOnMenuItemClickListener {
   // do something
   true
}

Benutzer-Avatar
Alexander Färber

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_add_customer, container, false);
        setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_sample, menu);
    super.onCreateOptionsMenu(menu,inflater);
}

Benutzer-Avatar
Khush Parmar

Sie können dies ganz einfach in Ihrem Fragment in der Create-Methode tun:

setHasOptionsMenu(true)

und jetzt können Sie überschreiben,

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    super.onCreateOptionsMenu(menu, inflater)
    menu.clear()
}

1347170cookie-checkonCreateOptionsMenu innerhalb von Fragments

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy