Android:在Activity生命周期中何时调用onCreateOptionsMenu?
我在onCreate
(一个开始,一个在方法结尾)放了几个断点,并且在onCreate
的开头也放了一个断点。 首先调用onCreate
方法,并在完成之前调用onCreateOptionsMenu
。
我想分开我的应用程序中的Fragment
导航代码,所以我有一些对象,我委派onCreateOptionsMenu
取决于如果应用程序正在手机/平板电脑上运行(我使用屏幕大小来确定这一点,我的布局大屏幕文件有一个视图,我检查后布局充气)。 我遇到的问题是,我在onCreate中创build这些对象,并且当我引用onCreateOptionsMenu
的对象时,我得到一个空指针exception。
首先调用onCreate方法,并在完成之前调用onCreateOptionsMenu。
对于具有官方Honeycomb风格的操作栏的设备和应用程序,情况将会如此。 如果没有操作栏, onCreateOptionsMenu()
不应该被调用,直到用户调用菜单,通常通过按MENUbutton。
(我正在使用屏幕大小来确定这一点,我的大屏幕布局文件有一个视图,我检查布局充气后)
一旦冰淇淋三明治运送,那testing将很快打破。 从我可以告诉,ICS电话将有行动酒吧(但也许不系统酒吧)。
在我的情况下在Android 2.3和从V4支持库的FragmentActivity
生命周期方法调用的顺序如下:
07-18 18:29:21.629 20183-20183/? I/onCreate: 07-18 18:29:21.719 20183-20183/? I/onStart: 07-18 18:29:21.719 20183-20183/? I/onResume: 07-18 18:29:21.739 20183-20183/? I/onCreateOptionsMenu:
除了上面的回答,在ICS和Honeycomb的情况下,onCreateOptionsMenu在onCreate和onPostCreate之后调用,而在Gingerbread和早期版本中调用onCreate之后而onPostCreate之前。 这是我发现的唯一区别。
我发现如果在onResume()我打电话
invalidateOptionsMenu();
然后onCreateOptionsMenu(菜单菜单)之后被调用 – 根据活动生命周期 (我认为这是正确的术语) ,如@ tir38
我build议在你的片段中创build一个callback函数来避免onResume()和onCreateOptionsMenu()的计时问题。
做以下作品对我来说是完美无缺的:
- 创build并添加你的片段到你的活动
- 在你的活动中留下这个片段的参考
- 在你的片段中创build一个公共方法doSomethingWithTheMenu()
- 调用onCreateOptionsMenu(菜单菜单)时,从您的活动中调用此方法。
例:
@Override public boolean onCreateOptionsMenu(Menu menu) { if (this.myFragment != null) { this.myFragment.doSomethingWithTheMenu(menu); } return true; }
根据我的经验,支持v7的ActionBarActivity onCreateOptionsMenu在setContentView()中调用; 方法。 在onCreate()中间出现在4.1.1上。 但是在onCreate()之后的另一个故事onCreateOptionMenu上调用了4.4。 我也不知道可能会马上过来,可能不会。 但事实上是事后。 我没有在其他版本上testing,但4.1.1是第一次,我有一个init命令的麻烦。