Ich hatte ein Problem beim Einrichten einiger Fragment Menüelemente in der ActionBar
und ich fand einen Weg, um es zu lösen, aber ich verstehe nicht, warum es funktioniert hat.Verwenden von onPrepareOptionsMenu anstelle von onCreateOptionsMenu in Fragment
Ich wollte die Sichtbarkeit in einem Menüelement direkt ändern, nachdem ich es aus einer Menü-XML-Datei in onCreateOptionsMenu
Methode aufgebläht habe. Der Code scheint gut zu funktionieren, aber es gibt keinen sichtbaren Effekt. Ich löste das Problem, das Menü in onCreateOptionsMenu
Methode aufzublasen, aber die Sichtbarkeit davon in onPrepareOptionsMenu
Methode zu ändern.
Ich möchte wissen, warum das Ändern der Sichtbarkeit in onCreateOptionsMenu
nicht funktioniert.
Was kann ich in onPrepareOptionsMenu
tun, dass ich in onCreateOptionsMenu
nicht tun kann?
Gibt es ein Muster, um hier zu folgen?
Danke!
Hier ist der entsprechende Code, nur für den Fall:
public class MyFragment extends Fragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.my_menu, menu);
// This does not work, compiles and runs fine, but has no visible effect
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// This does work
MenuItem someMenuItem = menu.findItem(R.id.some_menu_item);
someMenuItem.setVisible(false);
}
}
Ich bin nicht sicher, aber die [Dokumentation] (http://developer.android.com/reference/android/app/Activity. html # onCreateOptionsMenu (android.view.Menu)) sagt: "_ ... Um das Menü jedes Mal zu aktualisieren, wenn es angezeigt wird, siehe [onPrepareOptionsMenu (Menü)] (http://developer.android.com/reference/android/app/ Activity.html # onPrepareOptionsMenu (android.view.Menu)) ._ " –
Danke für den Kommentar! Die Sache hier ist, ich muss es nicht jedes Mal aktualisieren "(es wird ständig angezeigt, es gibt keine Untermenüs), ich möchte nur das Menü nur einmal konfigurieren, wenn erstellt/aufgeblasen und das ist alles . Gut, es mag in meiner Situation das Gleiche zu sein scheinen, aber der Punkt meiner Frage ist zu verstehen, warum es so funktioniert. Warum muss ich das Menü jedes Mal neu konfigurieren, wenn ich es nur einmal beim Erstellen erstelle? –
Ich verstehe und stimme zu, dass sollte eine Option sein. Meiner Meinung nach ist es aber so, wie Android funktioniert. In einigen Fällen können Sie die Eigenschaften des Menüs mit XML-Attributen fest codieren. –