【问题标题】:onCreateOptionsMenu not called in Fragment. Works on emulator, not on device片段中未调用 onCreateOptionsMenu。适用于模拟器,不适用于设备
【发布时间】:2014-04-08 19:35:25
【问题描述】:

我正在尝试覆盖我的 android.support.v4.app.Fragment 中的选项菜单。使用带有 Android 4.0 的模拟器时会调用 onCreateOptionsMenu 方法,但如果我在运行 4.4.2 的实际设备上运行它则不会。

我的主 Activity 扩展了 ActionBarActivity,并且我在 Fragment 的 onCreate 中进行了所需的 setHasOptionsMenu(true) 调用。我已经尝试过 ActionBarCompat 和 ActionBarSherlock,这两个库都有相同的问题。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    if(DEBUG) Log.v("Debug", "This method doesn't get called on a device");
    super.onCreateOptionsMenu(menu, inflater);
    ...

【问题讨论】:

    标签: android android-fragments android-actionbar android-optionsmenu


    【解决方案1】:

    尝试在 onResume() 中移动 setHasOptionsMenu(true);

    【讨论】:

      【解决方案2】:

      我不确定,但我会尽力帮助您。使用 ABS,我在"same" behaviour 上进行了回答,效果很好。然后,用AppCompat,你必须call super method after你所有的东西如下:

      @Override
      public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
          if(DEBUG) Log.v("Debug", "This method doesn't get called on a device");
          ... // I thought this "..." was your stuff, so do it here
          super.onCreateOptionsMenu(menu, inflater);
      }  
      

      您在this answer 上有很好的解释和示例。您还应该检查您的imports。但是,它可能与您的设备有关,而不是与您的操作方式有关(不确定,因为在 4.2.2 上使用 ABS 时,它运行良好)。

      【讨论】:

      • 谢谢!您的链接答案非常有帮助。在这种特殊情况下,我在点击 onCreateOptionsMenu 之前遇到了异常。删除该代码后,该方法就可以正常调用。仍然不确定为什么它是 4.2.2 设备上的问题,而不是 4.0 模拟器上的问题。
      • 真的很高兴能提供帮助。编码愉快!
      猜你喜欢
      • 2012-11-01
      • 2011-03-08
      • 2015-02-13
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多