[英]onCreateOptionsMenu(Menu menu) only gets called once during the lifecycle of an Activity
[英]Android: When is onCreateOptionsMenu called during Activity lifecycle?
我把一对夫妇断点onCreate
(一个开头,一个在方法结束),我也把一个之初onCreateOptionsMenu
。 首先调用onCreate
方法,然后在调用onCreateOptionsMenu
之前调用它。
我正试图在我的应用程序中分离Fragment
导航代码,所以我有几个对象,我委托onCreateOptionsMenu
取决于应用程序是否在手机/平板电脑上运行(我使用屏幕大小来确定这一点,我的布局大屏幕文件有一个View I在布局膨胀后检查。 我遇到的问题是,我在onCreate中创建了这些对象,当我在onCreateOptionsMenu
引用该对象时,我得到一个空指针异常。
首先调用onCreate方法,然后在调用onCreateOptionsMenu之前调用它。
在具有官方Honeycomb风格的操作栏的设备和应用程序中也是如此。 如果没有操作栏,则在用户调出菜单之前不应调用onCreateOptionsMenu()
,通常是按MENU按钮。
(我正在使用屏幕大小来确定这一点,我的大屏幕布局文件有一个View I在布局膨胀后检查)
一旦冰淇淋三明治发货,该测试将很快破裂。 据我所知,ICS手机将有动作栏(虽然可能不是系统栏)。
在我的Android 2.3和使用v4-support库的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:
我发现如果在onResume()中我打电话
invalidateOptionsMenu();
然后在onCreateOptionsMenu(菜单菜单)之后调用 - 根据活动生命周期 (我认为这是正确的术语) ,如@ tir38所示
@Override
public void onResume() {
super.onResume();
invalidateOptionsMenu();
}
在上面的答案中添加,在ICS和Honeycomb onCreateOptionsMenu的情况下,在onCreate和onPostCreate之后调用,而在Gingerbread和早期版本中,它在onCreate之后但在onPostCreate之前调用。 这是我发现的唯一区别。
根据我的经验, ActionBarActivity
来自支持v7 onCreateOptionsMenu()
在onCreate()
中间的setContentView()
方法中调用它出现在4.1.1上。
但是在4.4上另一个故事onCreateOptionMenu()
在onCreate()
之后调用。 我也不知道它可能是紧接着,也许不是。 但事实是事后。 我没有测试其他版本,但4.1.1是我第一次遇到init命令的问题。
我建议在你的片段中创建一个回调函数,以避免onResume()和onCreateOptionsMenu()的时间问题。
做以下工作对我来说完美无缺:
例:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (this.myFragment != null) {
this.myFragment.doSomethingWithTheMenu(menu);
}
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.