Wstawiłem kilka punktów przerwania onCreate
(jeden na początku i jeden na końcu metody), a także jeden na początku onCreateOptionsMenu
. onCreate
Metoda nazywa się pierwszy, a przed jej zakończeniem onCreateOptionsMenu
jest tzw.
Próbuję oddzielić Fragment
kod nawigacji w mojej aplikacji, więc mam kilka obiektów, do których deleguję, onCreateOptionsMenu
w zależności od tego, czy aplikacja działa na telefonie / tablecie (używam rozmiaru ekranu, aby to określić, mój plik układu dla duże ekrany mają Widok, który sprawdzam po zawyżeniu układu). Problem polega na tym, że tworzę te obiekty w onCreate i otrzymuję wyjątek zerowego wskaźnika, gdy odwołuję się do obiektu w onCreateOptionsMenu
.
źródło
NPE
, sprawdzając, czynav drawer fragment
jest otwarty wonCreateOptionsMenu
. Musiałem umieścić null sprawdzenia zarówno w onCreateOptionsMenu działania, jak i wywołaniu zwrotnym, którego fragment używał w swoim onCreateOptionsMenu. Naprawdę dziwne, ponieważ działo się to tylko na kilku ekranach, ale konsekwentnie na tych.W moim przypadku na Androidzie 2.3 iz
FragmentActivity
biblioteką obsługującą v4 kolejność wywołań metod cyklu życia jest następująca:źródło
Znalazłem, jeśli w onResume () dzwonię
następnie onCreateOptionsMenu (menu menu) jest wywoływane później - zgodnie z cyklem życia aktywności (myślę, że to poprawny termin) , jak wskazuje @ tir38
źródło
supportInvalidateOptionsMenu();
invalidateOptionsMenu
, zadanie (ponownego) utworzenia menu opcji zostanie dodane do kolejki komunikatów interfejsu użytkownika. Cokolwiek jeszcze jest w kolejce, zostanie uruchomione jako pierwsze.Dodatek w powyższej odpowiedzi, w przypadku ICS i Honeycomb onCreateOptionsMenu jest wywoływane po onCreate i onPostCreate, natomiast w Gingerbread i wcześniejszych wersjach jest wywoływane po onCreate, ale przed onPostCreate. To jedyna różnica, jaką znalazłem.
źródło
Z mojego doświadczenia
ActionBarActivity
z obsługi v7 wynika, że metodaonCreateOptionsMenu()
wywołana wsetContentView()
środkuonCreate()
pojawia się na 4.1.1.Ale na 4,4 inna historia
onCreateOptionMenu()
nazywa poonCreate()
. Nie wiem też, że może to nastąpić zaraz potem, może nie. Ale jest faktem później. Nie testowałem na innych wersjach, ale 4.1.1 jest pierwszym, w którym miałem problem z kolejnością inicjalizacji.źródło
supportInvalidateOptionsMenu()
?Proponuję utworzyć funkcję zwrotną w swoim fragmencie, aby uniknąć problemów z synchronizacją w onResume () i onCreateOptionsMenu ().
wykonanie następujących czynności bezbłędnie dla mnie:
przykład:
źródło