我把onCreate
几个断点(一个开头,一个在方法结束),我也把一个在onCreateOptionsMenu
的开始。该onCreate
方法首先被调用,并且在完成之前onCreateOptionsMenu
被调用。
我试图在Fragment
导航代码在我的应用程序分开,所以我有一对夫妇,我委托onCreateOptionsMenu
取决于如果应用是在手机/平板电脑上运行的对象(我使用的屏幕尺寸来确定这一点,我的布局文件大屏幕有一个查看我检查的布局充气后)。我遇到的问题是,我的onCreate创建这些对象,我得到一个空指针异常,当我在onCreateOptionsMenu
引用的对象。
该onCreate方法首先被调用,并且在完成之前onCreateOptionsMenu被调用。
这将是对设备和应用程序与正式的蜂巢式行动起来吧真。如果没有行动起来吧,onCreateOptionsMenu()
应该不会被调用,直到用户调用菜单,通常按MENU按钮。
(我使用的屏幕尺寸来确定这一点,大屏幕我的布局文件中有一个视图我检查的布局充气后)
该测试将打破很快,一旦Ice Cream Sandwich的船只。从我可以告诉,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:
我发现的onResume如果()我叫
invalidateOptionsMenu();
然后onCreateOptionsMenu(菜单菜单)后来被称为 - 按照活动的生命周期(我认为这是在这里,正确的说法),如@ tir38表示
@Override
public void onResume() {
super.onResume();
invalidateOptionsMenu();
}
除了上述的答案,在ICS和蜂窝onCreateOptionsMenu的情况下的onCreate和onPostCreate之后,而在名为姜饼及更早版本它的onCreate之后,但onPostCreate之前调用。那唯一的区别,我发现。
在从支持V7 ActionBarActivity
我的经验onCreateOptionsMenu()
称为setContentView()
方法onCreate()
中间是出现在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;
}