7

Ho problemi a ottenere onPrepareOptionsMenu() per funzionare correttamente. Non importa cosa cerco, non riesco a farmi chiamare.onPrepareOptionsMenu non si chiama

L'architettura della mia applicazione è la seguente: la mia attività principale contiene un frammento che contiene un ViewPager, che a sua volta ha quattro istanze Fragment figlio. Attualmente sto compilando (con successo) il menu delle opzioni iniziali nell'attività con onCreateOptionsMenu(), ma desidero aggiungere alcune opzioni aggiuntive corrispondenti a ciascun frammento figlio attivo.

nel mio Frammenti bambino, ho fatto in modo che setHasOptionsMenu(true) viene chiamato in onCreate() e che è chiamato a onActivityCreated(). Nell'attività principale, onCreateOptionsMenu() viene chiamato una volta dopo l'istanziazione dei frammenti figlio, indipendentemente dal fatto che contengano o meno supportInvalidateOptionsMenu(). Successivamente viene richiamato ogni volta che viene sostituito il frammento nel cercapersone.

Ho provato a spostare il codice onPrepareOptionsMenu() su un livello per il frammento principale e per l'attività principale - senza alcun risultato, il che suggerisce che il problema non è correlato al mio utilizzo di frammenti nidificati. Ho anche provato a spostare il metodo onCreateOptionsMenu() in giù dall'attività principale su entrambi i frammenti, dove non è richiesto.

Se qualcuno ha qualche idea su cosa sta succedendo qui, sarei molto grato, poiché sono rimasto bloccato su questo per due giorni.

AGGIORNAMENTO - Ho risolto esattamente qual è il problema ora, solo che non sono ancora sicuro su come risolverlo. Sto testando su 4.2 e sembra che onCreateOptionsMenu() venga chiamato dopo onResume() nell'attività - come visto in onCreateOptionsMenu called after onResume on JB 4.2. Presumo questo significa che i frammenti non possono chiamare onPrepareOptionsMenu() perché il menu non esiste nemmeno fino a quando non vengono istanziati. Quindi come posso risolvere questo?

risposta

4

Era, in qualche modo inevitabilmente, un problema con ActionBarSherlock che avevo trascurato controllando la sua pagina dei problemi su github. Fondamentalmente, la funzionalità per i menu delle opzioni nei frammenti annidati non è stata ancora aggiunta, vedi: https://github.com/JakeWharton/ActionBarSherlock/issues/828. Per ora la mia soluzione è sostituire Watson.java con uno dei file modificati nei commenti.

+2

mi hai salvato una giornata di lavoro, mi hai sbattuto la testa a questo – slinden77

+0

@dmmh Hai trovato la soluzione giusta per quel problema ?? –

+0

è nel mio commento :) – slinden77