如何在FragmentActivity中创建选项菜单?

时间:2014-05-06 06:35:58

标签: android android-fragmentactivity optionmenu

嗨下面是我用来在FragmentActivity中创建选项菜单的代码: -

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    // Menu options to set and cancel the alarm.
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            // When the user clicks START ALARM, set the alarm.
            case R.id.start_action:
                alarm.setAlarm(this);
                return true;
            // When the user clicks CANCEL ALARM, cancel the alarm. 
            case R.id.cancel_action:
                alarm.cancelAlarm(this);
                return true;
        }
        return false;
    }

有人会告诉我它为什么不起作用吗?它不会影响应用程序,但当我从设备单击选项菜单按钮时,没有任何事情发生。请帮助解决此问题。 提前谢谢!

下面是我的main.xml: -

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/start_action"
        android:showAsAction="ifRoom|withText"
        android:title="@string/start_text" />
    <item android:id="@+id/cancel_action"
        android:showAsAction="ifRoom|withText"
        android:title="@string/cancel_text" />
</menu>

3 个答案:

答案 0 :(得分:1)

返回Switch案例中的项目。 IT对我有用。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        // When the user clicks START ALARM, set the alarm.
        case R.id.start_action:
            alarm.setAlarm(this);
            return true;
        // When the user clicks CANCEL ALARM, cancel the alarm. 
        case R.id.cancel_action:
            alarm.cancelAlarm(this);
            return true;

        default:
            return super.onOptionsItemSelected(item);
      }
}

答案 1 :(得分:0)

虽然这个问题很老但是关闭它是我认为代码中缺少OP的原因

  

onCreateOptionsMenu

使用super返回它作为super.onCreateOptionsMenu(menu);

并在

  

onOptionsItemSelected

将super作为super.onOptionsItemSelected(item);

返回

所有返回类型都是布尔值,因此当它返回true时你会知道它正常工作。它就像simina到super.onCreate(savedInstancestate)。

答案 2 :(得分:-1)

更改

return false;

return super.onOptionsItemSelected(item);

as

   @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            // When the user clicks START ALARM, set the alarm.
            case R.id.start_action:
                alarm.setAlarm(this);
                return true;
            // When the user clicks CANCEL ALARM, cancel the alarm. 
            case R.id.cancel_action:
                alarm.cancelAlarm(this);
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

编辑:

此外,您必须将以下内容添加到Fragment

setHasOptionsMenu(true);