Android: How to add listener to hardware menu button?-ThrowExceptions

Exception or error:

I’m currently trying to add a click listener to the menu hardware button. Currently I’m just putting my onclick logic into the onCreatePanelMenu-method and return false. But that just feels wrong.

Is there a more clean way?

The code currently looks like that:

@Override
public boolean onCreatePanelMenu(int featureId, Menu menu) {
    Toast.makeText(this, "HALLO!", Toast.LENGTH_SHORT).show();
    return false;
}
How to solve:

Catch the key event inside onKeyDown() and add your action there.

Sample:

@Override
public boolean onKeyDown(int keycode, KeyEvent e) {
    switch(keycode) {
        case KeyEvent.KEYCODE_MENU:
            doSomething();
            return true;
    }

    return super.onKeyDown(keycode, e);
}

Just replace doSomething() with your functionality/methods.

###

If you need some code samples you can try this:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch (item.getItemId())
    {
        case R.id.preferences:
            showPreferencesActivity();
            return true;
        case R.id.logOff:
            logOff();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

The above should be pretty self explanotory – it sets a menu with the options to show preferences or log off.

/Nicklas

###

try this
http://developer.android.com/guide/topics/ui/menus.html#ChangingTheMenu

If you want to change the Options Menu any time after it’s first
created, you must override the onPrepareOptionsMenu() method

so the system will call onPrepareOptionsMenu() every time the user clicks Menu key

###

onContextItemSelected

onOptionsItemSelected

I beleive are what you are looking for.

Leave a Reply

Your email address will not be published. Required fields are marked *