How to Create option menu in FragmentActivity?

2019-07-02 12:54发布

问题:

Hi Below is the code I am using to create option menu in my 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;
    }

Will anybody tell me why it's not working? It is not affecting app but nothing is happening when I click the option menu button from device. Please Help to resolve this. Thanks in advance!

Below is my 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>

回答1:

Return item within Switch case like. ITs Work For me.

@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);
      }
}


回答2:

Although this question is old but to close it here is what i believe OP is missing in the code

In the

onCreateOptionsMenu

return it with the super as super.onCreateOptionsMenu(menu);

and in the

onOptionsItemSelected

return it with the super as super.onOptionsItemSelected(item);

all the return type is boolean so you will know it worked correctly when it returns true. Its like simillar to super.onCreate(savedInstancestate).



回答3:

Change

return false;

to

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);
    }

Edit:

Also you have to add the following to your Fragment

setHasOptionsMenu(true);