7

Ich habe Probleme, onPrepareOptionsMenu() richtig zu funktionieren. Egal, was ich versuche, ich kann es nicht angerufen bekommen.onPrepareOptionsMenu heißt nicht

Die Architektur meiner Anwendung ist wie folgt: Meine Hauptaktivität enthält ein Fragment, das einen ViewPager enthält, der wiederum vier untergeordnete Fragment-Instanzen hat. Zurzeit befülle ich (erfolgreich) das ursprüngliche Optionsmenü in der Aktivität mit onCreateOptionsMenu(), aber ich möchte einige zusätzliche Optionen hinzufügen, die jedem aktiven untergeordneten Fragment entsprechen.

In meinem Kind Fragmente, ich habe dafür gesorgt, dass setHasOptionsMenu(true) in onCreate() genannt wird, und dass in onActivityCreated() genannt wird. In der Hauptaktivität wird onCreateOptionsMenu() einmal aufgerufen, nachdem die untergeordneten Fragmente instanziiert wurden, unabhängig davon, ob sie supportInvalidateOptionsMenu() enthalten oder nicht. Es wird anschließend jedes Mal erneut aufgerufen, wenn das Fragment im Pager ersetzt wird.

Ich habe versucht, den onPrepareOptionsMenu() Code eine Ebene auf das Elternfragment und auf die Hauptaktivität zu verschieben - ohne Erfolg, was darauf hindeutet, dass das Problem nicht mit meiner Verwendung verschachtelter Fragmente zusammenhängt. Ich habe auch versucht, die onCreateOptionsMenu() Methode von der Hauptaktivität zu beiden Fragmenten zu verschieben, wo es nicht aufgerufen wird.

Wenn jemand eine Idee hat, was hier vor sich geht, wäre ich sehr dankbar, da ich seit zwei Tagen daran festhalte.

UPDATE - Ich habe genau herausgefunden, was das Problem jetzt ist, nur bin ich immer noch nicht sicher, wie es zu beheben ist. Ich teste auf 4.2 und es scheint, dass onCreateOptionsMenu() nach onResume() in der Aktivität aufgerufen wird - wie in onCreateOptionsMenu called after onResume on JB 4.2 zu sehen. Ich nehme an, dies bedeutet, dass Fragmente onPrepareOptionsMenu() nicht aufrufen können, weil das Menü nicht existiert, bis sie instanziiert werden. Also, wie löse ich das?

Antwort

4

Es war etwas unweigerlich ein Problem mit ActionBarSherlock, das ich übersehen hatte, als ich seine Ausgabenseite auf github untersuchte. Grundsätzlich wurde die Funktionalität für Optionsmenüs in verschachtelten Fragmenten noch nicht hinzugefügt, siehe: https://github.com/JakeWharton/ActionBarSherlock/issues/828. Meine Lösung ist jetzt, Watson.java durch eine der modifizierten Dateien in den Kommentaren zu ersetzen.

+2

Sie ersparte mir einen Tag der Arbeit, schlug mir den Kopf in diesem – slinden77

+0

@ dmmh Haben Sie die richtige Lösung für dieses Problem? –

+0

ist es in meinem Kommentar :) – slinden77