安卓:当onCreateOptionsMenu活动生命周期中的叫什么?

问题描述 投票:140回答:6

我把onCreate几个断点(一个开头,一个在方法结束),我也把一个在onCreateOptionsMenu的开始。该onCreate方法首先被调用,并且在完成之前onCreateOptionsMenu被调用。

我试图在Fragment导航代码在我的应用程序分开,所以我有一对夫妇,我委托onCreateOptionsMenu取决于如果应用是在手机/平板电脑上运行的对象(我使用的屏幕尺寸来确定这一点,我的布局文件大屏幕有一个查看我检查的布局充气后)。我遇到的问题是,我的onCreate创建这些对象,我得到一个空指针异常,当我在onCreateOptionsMenu引用的对象。

android android-fragments oncreate
6个回答
105
投票

该onCreate方法首先被调用,并且在完成之前onCreateOptionsMenu被调用。

这将是对设备和应用程序与正式的蜂巢式行动起来吧真。如果没有行动起来吧,onCreateOptionsMenu()应该不会被调用,直到用户调用菜单,通常按MENU按钮。

(我使用的屏幕尺寸来确定这一点,大屏幕我的布局文件中有一个视图我检查的布局充气后)

该测试将打破很快,一旦Ice Cream Sandwich的船只。从我可以告诉,ICS手机将有动作条(尽管可能不系统吧)。


51
投票

在我的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:

25
投票

我发现的onResume如果()我叫

invalidateOptionsMenu();

然后onCreateOptionsMenu(菜单菜单)后来被称为 - 按照活动的生命周期(我认为这是在这里,正确的说法),如@ tir38表示

@Override
public void onResume() {
    super.onResume();
    invalidateOptionsMenu();
}

21
投票

除了上述的答案,在ICS和蜂窝onCreateOptionsMenu的情况下的onCreate和onPostCreate之后,而在名为姜饼及更早版本它的onCreate之后,但onPostCreate之前调用。那唯一的区别,我发现。


3
投票

在从支持V7 ActionBarActivity我的经验onCreateOptionsMenu()称为setContentView()方法onCreate()中间是出现在4.1.1。

但在4.4 onCreateOptionMenu()后调用另一个故事onCreate()。此外,我不知道这可能是后立即,也许不是。但事实之后。我没有测试其它版本4.1.1,但首先,我必须有init命令麻烦。


2
投票

我建议建立在你的片段的回调函数,以避免的onResume()和onCreateOptionsMenu()时序问题。

执行以下操作对我的作品完美无瑕:

  1. 创建和您的片段添加到您的活动
  2. 留在你的活动这个片段的引用
  3. 在您的片段创建一个公共方法doSomethingWithTheMenu()
  4. 当onCreateOptionsMenu(菜单菜单)被称为从你的活动中调用此方法。

例:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (this.myFragment != null) {
        this.myFragment.doSomethingWithTheMenu(menu);
    }
    return true;
}
© www.soinside.com 2019 - 2024. All rights reserved.