Я установил пару точек останова onCreate
(одну в начале и одну в конце метода), а также одну в начале onCreateOptionsMenu
. onCreate
Метод вызывается первым, и до его завершения onCreateOptionsMenu
называется.
Я пытаюсь разделить Fragment
код навигации в своем приложении, поэтому у меня есть несколько объектов, которым я делегирую onCreateOptionsMenu
в зависимости от того, запущено ли приложение на телефоне / планшете (для определения этого я использую размер экрана, мой файл макета для на больших экранах есть вид, который я проверяю после раздувания макета). Проблема в том, что я создаю эти объекты в onCreate и получаю исключение нулевого указателя, когда ссылаюсь на объект в onCreateOptionsMenu
.
источник
NPE
при проверке,nav drawer fragment
был ли открыт вonCreateOptionsMenu
. Мне пришлось поставить нулевые проверки как в onCreateOptionsMenu действия, так и в обратном вызове, который фрагмент использовал в своем onCreateOptionsMenu. Действительно странно, потому что это происходило только на нескольких экранах, но последовательно на тех.В моем случае на Android 2.3 и с
FragmentActivity
библиотекой v4-support порядок вызова методов жизненного цикла следующий:источник
Я нашел, если в onResume () я звоню
затем вызывается onCreateOptionsMenu (меню меню) - в соответствии с жизненным циклом действия (я думаю, что это правильный термин здесь) , как указано @ tir38
источник
supportInvalidateOptionsMenu();
invalidateOptionsMenu
, задание (пере) создать меню параметров будет добавлено в очередь сообщений пользовательского интерфейса. Все, что находится в очереди, будет запущено первым.Добавление в ответе выше, в случае ICS и Honeycomb onCreateOptionsMenu вызывается после onCreate и onPostCreate, тогда как в Gingerbread и более ранних версиях он вызывается после onCreate, но до onPostCreate. Это единственная разница, которую я нашел.
источник
По моему опыту
ActionBarActivity
из поддержки v7onCreateOptionsMenu()
вызванныйsetContentView()
метод в серединеonCreate()
этого появляется на 4.1.1.Но на 4.4 другая история
onCreateOptionMenu()
называется послеonCreate()
. Кроме того, я не знаю, это может быть сразу после, а может и нет. Но это факт после. Я не тестировал другие версии, но 4.1.1 - первая, где у меня были проблемы с порядком инициализации.источник
supportInvalidateOptionsMenu()
?Я предлагаю создать функцию обратного вызова в вашем фрагменте, чтобы избежать проблем с синхронизацией с onResume () и onCreateOptionsMenu ().
выполнение следующих работ для меня безупречно:
пример:
источник